This is an automated email from the ASF dual-hosted git repository. dcelasun pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/thrift-website.git
commit 54f8e71f815e87a270baa4e46fbfedc84fc9c44e Author: Christopher Tubbs <[email protected]> AuthorDate: Thu Oct 29 04:53:26 2020 -0400 Initial Jekyll website skeleton --- .asf.yaml | 43 +++++++++ .github/workflows/jekyll.yaml | 57 ++++++++++++ .gitignore | 8 ++ .htaccess | 3 + CONTRIBUTING.md | 16 ++++ Gemfile | 3 + Gemfile.lock | 70 +++++++++++++++ LICENSE | 202 ++++++++++++++++++++++++++++++++++++++++++ NOTICE | 5 ++ README.md | 140 +++++++++++++++++++++++++++++ _config.yml | 38 ++++++++ _scripts/publish.sh | 54 +++++++++++ 12 files changed, 639 insertions(+) diff --git a/.asf.yaml b/.asf.yaml new file mode 100644 index 0000000..731b86b --- /dev/null +++ b/.asf.yaml @@ -0,0 +1,43 @@ +# +# 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. +# + +# https://cwiki.apache.org/confluence/display/INFRA/git+-+.asf.yaml+features + +github: + description: "Apache Thrift Website" + homepage: https://thrift.apache.org + labels: + - thrift + - asf-site + features: + wiki: false + issues: false + projects: false + +staging: + profile: ~ + whoami: asf-staging + +publish: + whoami: asf-site + +jekyll: + whoami: main + target: asf-staging + diff --git a/.github/workflows/jekyll.yaml b/.github/workflows/jekyll.yaml new file mode 100644 index 0000000..2a7705f --- /dev/null +++ b/.github/workflows/jekyll.yaml @@ -0,0 +1,57 @@ +# +# 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. +# + +name: CI + +on: + push: + branches: [ 'main' ] + pull_request: + branches: [ 'main' ] + +jobs: + jekyll: + timeout-minutes: 10 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Ruby + uses: actions/setup-ruby@v1 + with: + ruby-version: 2.6 + - name: Cache gems + uses: actions/cache@v2 + with: + path: ~/vendor/bundle + key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: ${{ runner.os }}-gem + - name: Test site build + run: | + ruby --version + gem install bundler + bundle config path ~/vendor/bundle + bundle install --jobs 4 --retry 3 + bundle exec jekyll build + - name: Upload site + uses: actions/upload-artifact@v2 + with: + name: site + path: ./_site/ + if-no-files-found: ignore + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..47aab83 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/_site +/.sass-cache +/.jekyll-cache/ +/.jekyll-metadata +/vendor +/.idea +/*.iml +/.bundle/ diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..0f1face --- /dev/null +++ b/.htaccess @@ -0,0 +1,3 @@ +RewriteEngine On +RewriteCond %{HTTPS} !=on +RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..dd30594 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contributing to the Thrift Website + +Contributions to the website can be made by creating pull +requests to this repo on GitHub. + +Before creating a pull request, follow the instructions in the +[README.md] to test your changes by running the website locally. + +If you cannot run the website locally, it's OK to submit your +pull request. A committer will test your changes before merging. + +For general information on contributing to Thrift projects, check +out the [How To Contribute][contribute] page. + +[README.md]: README.md +[contribute]: http://thrift.apache.org/docs/HowToContribute diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..81e5c1d --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +ruby '>=2.5.1' +source 'https://rubygems.org' +gem 'jekyll', '>= 3.7.4' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..ab47fbc --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,70 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + colorator (1.1.0) + concurrent-ruby (1.1.7) + em-websocket (0.5.2) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + eventmachine (1.2.7) + ffi (1.13.1) + forwardable-extended (2.6.0) + http_parser.rb (0.6.0) + i18n (1.8.5) + concurrent-ruby (~> 1.0) + jekyll (4.1.1) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (~> 2.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.4.0) + pathutil (~> 0.9) + rouge (~> 3.0) + safe_yaml (~> 1.0) + terminal-table (~> 1.8) + jekyll-sass-converter (2.1.0) + sassc (> 2.0.1, < 3.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + kramdown (2.3.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.2.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.4.0) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.6) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.4) + rouge (3.24.0) + safe_yaml (1.0.5) + sassc (2.4.0) + ffi (~> 1.9) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + unicode-display_width (1.7.0) + +PLATFORMS + ruby + +DEPENDENCIES + jekyll (>= 3.7.4) + +RUBY VERSION + ruby 2.7.2p137 + +BUNDLED WITH + 2.1.4 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..01cb138 --- /dev/null +++ b/NOTICE @@ -0,0 +1,5 @@ +Apache Thrift Website +Copyright 2020 The Apache Software Foundation. + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). diff --git a/README.md b/README.md new file mode 100644 index 0000000..48f7dac --- /dev/null +++ b/README.md @@ -0,0 +1,140 @@ +# Apache Thrift Website + +Apache Thrift's website is generated from Markdown source +(specifically, [kramdown] style) with [Jekyll], using [Bundler] +to manage its gem dependencies. + +## Development + +## Local Builds for Testing + +### Setting up Your Jekyll/Bundler Environment + +Ruby and RubyGems are required to use [Jekyll] and [Bundler], so +first make sure you have those on your machine. + +If you are using an OS packaged version of Ruby, you may also +need to install the ruby-dev (Ubuntu) or ruby-devel (Fedora) +package as well to build any native code for gems that are +installed later. Installing these will also ensure your system's +RubyGems package is installed. Depending on your OS, you may also +need other packages to install/build gems, such as ruby-full, +make, gcc, nodejs, build-essentials, or patch. + +Once Ruby, RubyGems, and any necessary native tools are +installed, you are ready to install [Bundler] to manage the +remaining RubyGem dependencies. Bundler is included in Ruby 2.6 +and later as a default gem, so installing it may not be needed. + +Because we use [Bundler] to install specific versions of gems, it +is not recommended to use an OS packaged version of gems other +than what comes built-in. If you are using an OS packaged version +of Ruby, it is __strongly__ recommended to avoid `sudo` when +installing additional gems, in order to avoid conflicting with +your system's package-managed installation. Instead, you can +specify a `GEM_HOME` directory for installing gems locally in +your home directory. You can do this in your `$HOME/.bashrc` file +or other appropriate place for your environment: + +```bash +# in .bashrc +export GEM_HOME=$HOME/.gem/ruby +``` + +With Ruby installed on your machine, you can install [Bundler] +using the command below: + +```bash +# not necessary in Ruby >2.6, since it is a default gem since 2.6 +gem install bundler +``` + +Next, use [Bundler] to install [Jekyll] and other dependencies +needed to run the website (this command assumes your current +working directory is your clone of this repository with the +`main` branch checked out, because that's where the Gemfile +dependency list exists). + +```bash +bundle install +``` + +### Testing with the Built-in Jekyll Webserver + +The command to serve the site contents using Jekyll's built-in +webserver is as follows (this webserver may behave differently +than apache.org's servers). + +```bash +bundle exec jekyll serve -w +``` + +You do __NOT__ need to execute a `bundle exec jekyll build` +command first, as the `serve` command is sufficient to both build +the site and serve its contents. By default, it will also try to +re-build any pages you change while running the webserver, which +can be quite useful if trying to get some CSS or HTML styled +"just right". + +Jekyll will print a local URL where the site can be viewed +(usually, [http://0.0.0.0:4000/](http://0.0.0.0:4000/)). + +## Publishing + +### Automatic Staging + +Changes pushed to our `main` branch will automatically trigger +Jekyll to build our site from that branch and push the result to +our `asf-staging` branch, where they will be served on [our +default staging site][staging]. + +### Publishing Staging to Production + +First, add our repository as a remote in your local clone, if you +haven't already done so (these commands assume the name of that +remote is 'upstream'). + +Example: + +```bash +git clone https://github.com/<yourusername>/thrift-website +cd thrift-website +git remote add upstream https://github.com/apache/thrift-website +``` + +Next, publish the staging site to production by updating the +`asf-site` branch to match the contents in the `asf-staging` +branch: + +```bash +# Step 0: stay in main branch; you never need to switch +git checkout main + +# Step 1: update your upstream remote +git remote update upstream + +# Step 2: push upstream/asf-staging to upstream/asf-site +# run next command with --dry-run first to see what it will do without making changes +git push upstream upstream/asf-staging:asf-site +``` + +A convenience script can be found that performs these steps for +you, after asking which remote you want to use. It is located in +the `main` branch at `_scripts/publish.sh` + +Note that Step 2 should always be a fast-forward merge. That is, +there should never be any reason to force-push it if everything +is done correctly. If extra commits are ever added to `asf-site` +that are not present in `asf-staging`, then those branches will +need to be sync'd back up in order to continue avoiding force +pushes. + +The final site can be viewed [here][production]. + + +[Bundler]: https://bundler.io/ +[Jekyll]: https://jekyllrb.com/ +[Liquid]: https://jekyllrb.com/docs/liquid/ +[kramdown]: https://kramdown.gettalong.org/ +[production]: https://thrift.apache.org +[staging]: https://thrift.staged.apache.org diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..6ec575b --- /dev/null +++ b/_config.yml @@ -0,0 +1,38 @@ +# +# 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. +# + +# Basic site settings +safe: false +title: Apache Thrift™ +email: [email protected] +description: >- + The Apache Thrift software framework, for scalable cross-language services + development, combines a software stack with a code generation engine to build + services that work efficiently and seamlessly between many languages. +url: "https://thrift.apache.org" + +# Default front-matter values for specific collections +defaults: + - + scope: + path: "" + type: "pages" + values: + layout: "default" + diff --git a/_scripts/publish.sh b/_scripts/publish.sh new file mode 100755 index 0000000..10dc29c --- /dev/null +++ b/_scripts/publish.sh @@ -0,0 +1,54 @@ +#! /usr/bin/env bash +# +# 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. +# + +# catch most errors +set -eE +trap 'echo "[ERROR] Error occurred at $BASH_SOURCE:$LINENO command: $BASH_COMMAND"' ERR + +function publish_main() { + local src='asf-staging' dst='asf-site' r yn remotes=() + for r in $(git remote); do + remotes+=("$r ($(git config "remote.$r.url"))") + done + echo 'Select a remote:' + select r in "${remotes[@]}"; do + if [[ -n $r ]]; then + r="${r%% *}" + git remote update --prune "${r:?}" + echo 'Updating would perform the following (if anything):' + git push --dry-run "$r" "$r/$src:refs/heads/$dst" + if [[ "$(git rev-parse "remotes/$r/$src")" == "$(git rev-parse "remotes/$r/$dst")" ]]; then + return 0 + fi + read -r -p "Are you sure you want to publish '$r/$src' to '$r/$dst'? " yn + if [[ $yn =~ ^[yY]$|^[yY][eE][sS]$ ]]; then + git push "$r" "$r/$src:refs/heads/$dst" + else + echo "You did not answer 'y' or 'yes', so no updates were made." + fi + return 0 + else + echo 'ERROR - Invalid selection' + return 1 + fi + done +} + +publish_main "$@" || exit 1
