Archiva Site Source Repository
==============================
:toc:

This project contains the sources for the main archiva site at https://archiva.apache.org/

You can build the web content and publish it to the content repository archiva-web-content.git.


== How to build and publish the pages for the archiva web content


The web content parts of this module are published to the path 

  /

=== Use the script

There is a shell script +deploySite.sh+ which you can run to generate the site check and publish to 
the remote repository. It works only on Linux, on other platforms you have to go the next section.

The script is interactive, it asks you to confirm the publish after generation of the staging part.

.Execute

  ./deploySite.sh 

All arguments are appended to the mvn calls.

=== Run the steps manually

==== Checkout the site-content directory

 git clone <PATH TO archiva-web-content.git> site-content --no-checkout
 git -C site-content config core.sparsecheckout true
 git -C site-content config user.name <YOUR NAME>
 git -C site-content config user.email <YOUR MAILADDRESS>

Copy the +git-sparse-checkout-pattern+ file to +site-content/.git/info/sparse-checkout+

 git -C site-content checkout --

==== Building the pages

You need enough free disk space to publish the web content. The archiva web site repository is big, 
but the maven build will only checkout the necessary directories for this build (sparse checkout).

For all the commands you have to change to this repository directory:

  cd archiva-site

.The following creates the site and copies the files to the staging folder

  mvn clean site site:stage

The result can be checked in 

  archiva-site/target/staging/

with your browser.

If you would like the use a local checkout of the archiva-web-content.git repository and not push directly
to the remote repository, you may add this parameter:

  -DsiteRepositoryUrl=scm:git:file:///${path-to-your-local-archiva}/archiva-web-content.git

where +${path-to-your-local-archiva}+ is the path where a bare clone of the archiva-web-content.git is stored.

==== Publish the pages

.This command publishes to the git repository

  mvn scm-publish:publish-scm

After publishing to the git repository the gitpubsub mechanism is transferring it to the HTTP server.

If you would like the use a local checkout of the archiva-web-content.git repository and not push directly
to the remote repository, you may add this parameter:

  -DsiteRepositoryUrl=scm:git:file:///${path-to-your-local-archiva}/archiva-web-content.git


=== Some notes about the build process

A sparse checkout of the git repository will be created in 

 site-content

but only, if the directory +site-content/.git+ does not exist. 


