= Apache Shiro Website Overview

The Apache Shiro website is a static content website accessible at http://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 generate-resources
# 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 --exclude '.asf.yaml' 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.
