//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.
= Updating the top-level Incubator website
Apache Incubator PMC
2002-10-16
:jbake-type: pmcGuide
:jbake-status: published
:idprefix:
:toc:
:imagesdir: ../images/

== Repository

The Incubator website is generated from the content link:https://github.com/apache/incubator[here]. See instructions
there for how to edit and publish the website.

The system reports website build failures to *cvs AT incubator.apache.org*.

== Maintaining Status files

Podling status files are in SVN, and you should continue to maintain them at https://svn.apache.org/repos/asf/incubator/public/trunk/content/projects/ .

Podling status files are in a particular XML format which the Clutch Analysis expects.

Extra podling yaml files that communicate with Whimsy are also in SVN, and you should maintain them at https://svn.apache.org/repos/asf/incubator/public/trunk/content/podlings/ .

== IP Clearance

IP Clearance is in SVN, and you should continue to maintain it at https://svn.apache.org/repos/asf/incubator/public/trunk/content/ip-clearance/ .

== Building

The website metadata is built by this link:https://ci-builds.apache.org/job/Incubator/job/Incubator-SVN-Clutch-Analysis-part-1/[Clutch Jenkins job],
and the website is built by this link:https://ci-builds.apache.org/job/Incubator/job/Incubator-GIT-Site-part-2/[Website Jenkins job].
If you have karma you can trigger a build yourself.
Commits to the git repo trigger builds automatically, and the website builds daily for other changes after midnight UTC.
Commits to the svn repo trigger builds automatically as well using this link:https://ci-builds.apache.org/job/Incubator/job/Trigger-Clutch-Analysis-on-SVN-Change/[SVN Trigger Jenkins job].

== Help Wanted!
People with commit access to the "incubator" git repository (any ASF Member and
any committer to a current podling in incubation) can edit the source
documents in the "content" directory. So you can all help to
keep your project's Status page up-to-date. If you find problems with
the "guidelines" docs, you can immediately fix them.
If you are unsure, discuss your proposed changes on the general mailing list.
Note that the "policy" documents need special treatment and discussion on the general mailing list.

Anyone else can send patches to those documents to the link:https://issues.apache.org/jira/projects/INCUBATOR[INCUBATOR issue tracker].
