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

Reply via email to