% Release and Deployment Procedure
\vspace{-0.5in}

{\scriptsize Last modified April 28, 2010}

\textit{Most contributors/committers do not need to read this.  This explains
our entire release and deployment procedure: setting the Photran version
number, updating the Web site, etc.}

\section{Preparing for a Release Build}

\begin{enumerate}

\item Proofread the documentation on the wiki.  Make sure version numbers are
      correct, screenshots and step-by-step instructions are up-to-date, and
      UI labels are up-to-date (e.g., if the name of a refactoring changed).

\item Regenerate the org.eclipse.photran.doc.user plug-in from the wiki.
      See Appendix~\ref{app:help} for details.

\item Update the plug-in version numbers in all projects.

\item Update the feature.xml and feature.properties files for
    \begin{itemize}
    \item org.eclipse.photran-feature,
    \item org.eclipse.photran.intel-feature,
    \item org.eclipse.photran.xlf-feature, and
    \item org.eclipse.rephraserengine-feature.
    \end{itemize}
    \begin{enumerate}
    \item Change the feature version.
    \item Change the versions of other features/plug-ins it depends on\dots
    \begin{itemize}
        \item org.eclipse.photran-feature must specify the correct versions of
            \begin{itemize}
            \item CDT
            \item Rephraser Engine
            \end{itemize}
        \item org.eclipse.photran.intel-feature must specify the current version of Photran
        \item org.eclipse.photran.xlf-feature must specify the current version of Photran
    \end{itemize}
    \item the copyright year
    \item the update site URL
    \end{enumerate}

\item Update URLs to reflect the new version numbers...
    \begin{enumerate}
    \item Update the Welcome Page URL in org.eclipse.photran.ui/intro/overviewContent.xml
    \item Note that the URL for the release notes shown when the user first installs a new
          version of Photran is determined by the version of the org.eclipse.photran.ui
          plug-in (see ShowReleaseNotes.java for details); this is not necessarily the same
          as the Welcome Page URL.
    \item Be sure the Web site actually contains pages at these URLs; add them if necessary
    \end{enumerate}

\item If the VPG database structure (or any of the serialized classes) have
changed, update
    \begin{itemize}
    \item the VPG database filename in the PhotranVPGDB class constructor and
    \item the VPG log filename in the PhotranVPGLog class constructor.
    \end{itemize}
For example, in Photran 4.0 beta 5, the database filename was ``photran40b5vpg''.

\item Make sure the org.eclipse.photran.cmdline JAR is up-to-date.

\item Make sure the org.eclipse.ptp.releng scripts have the correct versions.
    \textit{Note that Photran is built from PTP's releng scripts; Photran's own
    releng scripts are no longer used.}

\item Greg Watson will initiate a PTP build at build.eclipse.org.

\end{enumerate}

\section{After the Release Has Been Built}

\begin{enumerate}

\item Update the timeline in this guide's Release History appendix
(org.eclipse.photran-dev-docs/dev-guide/app-history.ltx-inc)

\item The PTP release engineering team will create a maintenance branch in Git.
      For example, a ptp\_5\_0 branch was created after the Photran 7/PTP 5 release
      and was subsequently used to build Photran 7.0.1, etc.

\item Add a Bugzilla version for the release and a target for the next expected release

\item Update the Web site.  It is in the following Git
      repository:\footnote{See \url{http://bugs.eclipse.org/413409}} \\
      \centerline{\texttt{ssh://username@git.eclipse.org/gitroot/www.eclipse.org/photran.git}}
    \begin{enumerate}
    \item Update the home page to mention the release
    \item Change the update site URL and archived update site link on the Downloads page
    \item Update the Report a Bug URL in the nav bar to default to the new release version
    \end{enumerate}

\item Announce the release, e-mailing the photran, ptp-dev, and ptp-announce mailing lists

\item Copy the Documentation pages on the wiki and update the version numbers for the next expected release

\item Update the Project Plan at the Eclipse Foundation Portal\dots
    \begin{enumerate}
    \item Mark the released version as ``released'' with the correct date.
    \item Add a planned/tentative next release at some future date.
    \end{enumerate}

\end{enumerate}
