= Apache Shiro Website Overview

The Apache Shiro website is a static content website accessible at https://shiro.apache.org/.

Site content is authored as Markdown, Asciidoc and HTML files.
These files are parsed by the tool `jbake` and renders the content files using freemarker templates to static `.html` files.

To publish the site commit changes to the `asf-site` branch of this repository.
ASF infrastructure will see the commit and automatically push the changes to the ASF͘'s production webservers.

== Generating and Publishing

The tool used to generate the static content is https://jbake.org/[JBake].
JBake is used as a maven plugin, i.e. you do not need to have it in your `${PATH}`.
Generating and publishing the site on the command only takes a few maven and git commands.
Please carefully check the requirements outlined in link:CONTRIBUTING.adoc[].

The following example assumes you have commit permissions to the `apache/shiro-site` repository, typically because you are an Apache Shiro project committer:

[source,bash]
----
# clone both repo branches `asf-site` and `main`
git clone https://github.com/apache/shiro-site -b asf-site shiro-site-publish
git clone https://github.com/apache/shiro-site

# build the site
cd shiro-site
mvn clean process-classes
# Open up the local ../shiro-site-publish/index.html file in your web browser.
# Ensure the changes reflect what you want.

# These next commands will publish changes to live ASF web servers.
# Be confident the changes are what you want:
rsync -avP target/website/. ../shiro-site-publish
cd ../shiro-site-publish
# Please check that you did not modify any of the following files:
# .asf.yaml
# .htaccess
# robots.txt
git add .
git commit -am "my change description"
git push origin asf-site
----

It should only take a few moments until the changes are live.
