diff --git a/config/framework.tex b/config/framework.tex index e48f1a2..ef18573 100644 --- a/config/framework.tex +++ b/config/framework.tex @@ -1,4 +1,5 @@ -\documentclass[a4paper,12pt,twoside]{article}% +\documentclass[12pt]{article}% +\usepackage[a3paper]{geometry} \usepackage[utf8]{inputenc}% \usepackage[T1]{fontenc}% \usepackage{caption}% @@ -26,25 +27,25 @@ citecolor = black]{hyperref}% \usepackage{pstricks} \usepackage{colortbl} -\newcommand*\euler{\mathrm{e}} -\input{title.tex} +%\newcommand*\euler{\mathrm{e}} +%\input{title.tex} \input{config/font.tex} -\input{config/sourcelst.tex} +%\input{config/sourcelst.tex} \begin{document} \clearscrheadfoot \clearscrplain \clearscrheadings \pagestyle{scrplain} % switch off head and foot line -\input{config/titlepage.tex} -\pagestyle{scrheadings} % switch on head and foot line -\newpage -\tableofcontents -\listoffigures -\listoftables -\lstlistoflistings -\input{config/headfoot.tex} -\newpage +%\input{config/titlepage.tex} +%\pagestyle{scrheadings} % switch on head and foot line +%\newpage +%\tableofcontents +%\listoffigures +%\listoftables +%\lstlistoflistings +%\input{config/headfoot.tex} +%\newpage \input{content.tex} \end{document} diff --git a/content.tex b/content.tex index addabe6..f0b83bf 100644 --- a/content.tex +++ b/content.tex @@ -1,195 +1,8 @@ -\section{Gitlab workflow} \label{sec:glw} - \begin{figure} \begin{center} \input{img_gitlab.tex} - \caption{Gitlab workflow} - \label{fig:gitlab_workflow} +% \caption{Gitlab workflow} +% \label{fig:gitlab_workflow} \end{center} \end{figure} -Figure \ref{fig:gitlab_workflow} gives an overview of the gitlab workflow. -The workflow is splitted in different phases:\\ - -\begin{itemize} - \item Implementation phase - \item Code freeze - \item Release phase -\end{itemize} - -For these different phases The continuous integration/delivery system -triggers different build stages. For further details please refer to -section \ref{sec:ci}. - -\subsection{Implementation phase} - -While in implementation phase every implementation for the next release is -done. Every implementation has to be done on a seperate branch. After -finishing an implementation the branch it was made on has to be merged back -to the master branch. As defined an implementation could be one of:\\ - -\begin{itemize} - \item Feature - \item Fix -\end{itemize} - -\subsubsection{Feature implementation} - -A feature is a a new piece of code that implements new functionality into -the system. - -\subsubsection{Fix implementation} - -If in any testing phase an issue is detected these issue can be fixed with -a fix implementation. - -\subsubsection{Further kinds of implementation} - -Beside these defined implementations any other kind of implementation is -possible but has to be made also on a seperate branch. - -\subsection{Code freeze} - -The transition between implementation phase and release phase is called -code freeze. Code freeze means each for the upcoming release planned -feature is implemented and merged to the main branch (normally master) of -the project's git repository (see figure \ref{fig:gitlab_workflow}). For -the upcoming release a "\texttt{release/...}" named branch is created. -For a proper release configuration it is necessary to configure the ci -build job before creating the release branch (see section \ref{sec:ci_conf}) -. - -\subsection{Release phase} - -Any release relevant issue that is detected while release phase has to be -fixed at the release branch. The release phase is splitted into different -stages: - -\begin{itemize} - \item Internal release(s) - \item External release -\end{itemize} - -\subsubsection{Internal release(s)} - -Each push to a release branch triggers the creation of an internal release. -Only internal releases must be used to system test the release branch. For -details please refer to section \ref{sec:ci_int}. - -\subsubsection{External release} - -If no further release relevant issues could be found (or are accepted as -known issues) an external release is created by tagging the commit which -should be delivered to the customer. For details please refer to section -\ref{sec:ci_ext}. - -\section{Continuous integration/delivery} \label{sec:ci} - -As continuous integration system the gitlab built in ci-system -\textit{gitlab-ci} is used. Beside the most important task of ci, ensure -constant high code quality, the ci system is used for various tasks: - -\FloatBarrier -\begin{itemize} - \item Automated static code analysis - \item Automated build - \item Automated test (not implemented yet) - \item Internal release deployment - \item External release deployment - \item Automated release note generation (not implemented yet) -\end{itemize} -\FloatBarrier - -\subsection{Internal release deployment} \label{sec:ci_int} - -\begin{figure} - \begin{center} - \input{img_deploy.tex} - \caption{Deployment of release candidats and releases} - \label{fig:deployment} - \end{center} -\end{figure} - -For a branch named \texttt{release/...} the creation of a release candidate -is triggered automatically. Figure \ref{fig:deployment} illustrates the -deployment process. The internal release is processing the following steps: -\\ - -\begin{enumerate} - \item Build project variant specific configuration - \item Static code analysis of project variant specific configuration - \item Name the release depending on the release naming convention - \item Build release notes for the release candidate - \item Deploy the release to the project's release candidate deploy -location -\end{enumerate} - -\subsection{External release deployment} \label{sec:ci_ext} - -To create an external release the commit to be released must be tagged -using the following naming convention:\\ -\texttt{release/}.\\ -The project specific naming convention for Agricola ruby is:\\ -\texttt{release/174\_AG*}.\\ - -\begin{enumerate} - \item Build project variant specific configuration - \item Static code analysis of project variant specific configuration - \item Name the release depending on the release naming convention - \item Build release notes for the release - \item Deploy the release to the project's release deploy location -\end{enumerate} - -\subsection{Release note generation} \label{sec:rel_note} - -\begin{figure} - \begin{center} - \input{img_history.tex} - \caption{Git commit history} - \label{fig:git_commit_history} - \end{center} -\end{figure} - -To generate release notes by commit messages special tagged commit messages -are used. Release notes are generated for release candidats and releases. -For release candidats (internal releases) more tags are analyzed. The -definition of the commit tag rules are somewhere in the Polarion :) Because -the release notes content is taken from the log history of a release branch -each commit in it's history has to use tagged commits. To show logs only of -direct parents (commits on the current release branch and commits on the -master) the log command\\ -\texttt{git log ..HEAD --first parent master}\\ -can be used. Figure \ref{fig:git_commit_history} illustrates the flow of the -log history of the release branch shown in figure \ref{fig:gitlab_workflow}. - -\subsection{Configuring the build jobs} \label{sec:ci_conf} - -The configuration of gitlab-ci is made in the \texttt{.gitlab-ci.yml} file -in the root directory of the project's repository. The certain build stages -are using variables to customize the build. These variables are defined in -the \texttt{variables} section of the config file. Table \ref{tab:conf_var} -and listing \ref{lst:ag_cfg} gives an overview about customizing a release -phase. - -\captionof{table}{Variables to customize a release phase} -\label{tab:conf_var} -\begin{tabular}{l l l} - \cellcolor{black}\color{white}variable & \cellcolor{black}\color{white}meaning & \cellcolor{black}\color{white}example\\ - PRODUCT\_NAME & Short of the product name & AG\\ - PRODUCT\_VARIANT & Short of the product variant & NA\\ - PROJECT\_VERSION & ?? & 10\\ - SW\_MAJOR & Software major number & 1\\ - SW\_MINOR & Software minor number & 2\\\\ -\end{tabular} -\newline - -\lstsetbash -\begin{lstlisting}[caption=variables configuration, label=lst:ag_cfg] -variables: - PRODUCT_NAME: "AG" - PRODUCT_VARIANT: "NA" - PROJECT_VERSION: "10" - SW_MAJOR: "1" - SW_MINOR: "2" -\end{lstlisting} - diff --git a/img_gitlab.tex b/img_gitlab.tex index 513ce0e..915aae6 100644 --- a/img_gitlab.tex +++ b/img_gitlab.tex @@ -1,136 +1,259 @@ \psset{griddots=0,gridlabels=8pt,subgriddiv=5} \psset{xunit=10mm,yunit=10mm} -\begin{pspicture}(14,16) +\begin{pspicture}(14,26) % \psgrid \newcommand{\clr}{black} - % phases - \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,2)(14,2) - \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,8)(14,8) - \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,14)(14,14) - \rput{0}(1.5,8){ - \psset{fillcolor=white} - \psset{fillstyle=solid} - \psset{linecolor=\clr} - \psset{framearc=.5} - \psframebox{\textcolor{\clr}{code freeze}} - } - \psline[linewidth=1pt,linecolor=\clr]{<->}(13.5,2)(13.5,8) - \rput{90}(13.5,5){ - \psset{fillcolor=white} - \psset{fillstyle=solid} - \psset{linecolor=\clr} - \psset{framearc=.5} - \psframebox{\textcolor{\clr}{implementation phase}} - } - \psline[linewidth=1pt,linecolor=\clr]{<->}(13.5,8)(13.5,14) - \rput{90}(13.5,11){ - \psset{fillcolor=white} - \psset{fillstyle=solid} - \psset{linecolor=\clr} - \psset{framearc=.5} - \psframebox{\textcolor{\clr}{release phase}} - } - - % master \newcommand{\masterx}{7} - \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\masterx,1)(\masterx,15) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\masterx,1)(\masterx,26) \psset{fillcolor=\clr} \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,2) - \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,3) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,6) \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,7) \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,8) - \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,14) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,11) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,12) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,13) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,15) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,16) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,17) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,18) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,23) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,24) \rput(\masterx,0.5){ \psset{fillcolor=white} \psset{fillstyle=solid} \psset{linecolor=\clr} \psset{framearc=.5} - \psframebox{\textcolor{\clr}{master}} + \psframebox{\textcolor{\clr}{white2\_master}} } - % feature/anti_osc + % release/.../iteration_1 \renewcommand{\clr}{ForestGreen} - \newcommand{\featurex}{5} + \newcommand{\featurex}{3} + \psset{fillcolor=\clr} \psline[linewidth=2pt,linecolor=\clr](\masterx,2)(\featurex,3) - \psline[linewidth=2pt,linecolor=\clr](\featurex,3)(\featurex,7) - \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\featurex,7)(\masterx,8) - \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\featurex,2)(\featurex,8) - \multido{\nA=3+2}{3}{ - \psset{fillcolor=\clr} - \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,\nA) - } - \rput(\featurex,1.5){ + \psline[linewidth=2pt,linecolor=\clr](\featurex,3)(\featurex,11) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\featurex,11)(\masterx,12) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\featurex,2.5)(\featurex,8.5) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,3) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,7) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,11) + \rput(2.5,2){ \psset{fillcolor=white} \psset{fillstyle=solid} \psset{linecolor=\clr} \psset{framearc=.5} - \psframebox{\textcolor{\clr}{feature/anti\_osc}} + \psframebox{\textcolor{\clr}{release/white2/I320/iteration\_1}} } - % old_branch - \renewcommand{\clr}{Gray} - \newcommand{\xpos}{9} - \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\xpos,2)(\masterx,3) - \psline[linewidth=2pt,linecolor=\clr](\xpos,1)(\xpos,2) - - % fix/calibration_crc + % release/.../iteration_2 + \psset{fillcolor=\clr} + \psline[linewidth=2pt,linecolor=\clr](\masterx,12)(\featurex,13) + \psline[linewidth=2pt,linecolor=\clr](\featurex,13)(\featurex,17) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\featurex,17)(\masterx,18) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\featurex,12.5)(\featurex,17.5) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,13) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,17) + \rput(2.5,12){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{release/white2/I320/iteration\_2}} + } + % release/.../iteration_3 + \psset{fillcolor=\clr} + \psline[linewidth=2pt,linecolor=\clr](\masterx,18)(\featurex,19) + \psline[linewidth=2pt,linecolor=\clr](\featurex,19)(\featurex,23) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\featurex,23)(\masterx,24) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\featurex,18.5)(\featurex,23.5) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,19) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,23) + \rput(2.5,18){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{release/white2/I320/iteration\_3}} + } + % fix/error_1 \renewcommand{\clr}{Maroon} - \newcommand{\fixx}{9} - \psline[linewidth=2pt,linecolor=\clr](\masterx,3)(\fixx,4) + \newcommand{\fixx}{5} + \psline[linewidth=2pt,linecolor=\clr](\featurex,3)(\fixx,4) \psline[linewidth=2pt,linecolor=\clr](\fixx,4)(\fixx,6) - \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,6)(\masterx,7) - \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,3)(\fixx,7) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,6)(\featurex,7) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt,linestyle=dashed]{->}(\fixx,6)(\masterx,7) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,3.5)(\fixx,6.5) \multido{\nA=4+2}{2}{ \psset{fillcolor=\clr} \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,\nA) } - \rput(\fixx,2.5){ + \rput(5.5,3.3){ \psset{fillcolor=white} \psset{fillstyle=solid} \psset{linecolor=\clr} \psset{framearc=.5} - \psframebox{\textcolor{\clr}{fix/calibration\_crc}} + \psframebox{\textcolor{\clr}{fix/error\_1}} } - % feature/dynamic_monitoring + % fix/error_2 + \psline[linewidth=2pt,linecolor=\clr](\featurex,7)(\fixx,8) + \psline[linewidth=2pt,linecolor=\clr](\fixx,8)(\fixx,10) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,10)(\featurex,11) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt,linestyle=dashed]{->}(\fixx,10)(\masterx,11) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,7.5)(\fixx,10.5) + \multido{\nA=8+2}{2}{ + \psset{fillcolor=\clr} + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,\nA) + } + \rput(5.5,7.3){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{fix/error\_2}} + } + % fix/error_3 + \psline[linewidth=2pt,linecolor=\clr](\featurex,13)(\fixx,14) + \psline[linewidth=2pt,linecolor=\clr](\fixx,14)(\fixx,16) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,16)(\featurex,17) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt,linestyle=dashed]{->}(\fixx,16)(\masterx,17) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,13.5)(\fixx,16.5) + \multido{\nA=14+2}{2}{ + \psset{fillcolor=\clr} + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,\nA) + } + \rput(5.5,13.3){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{fix/error\_3}} + } + % fix/error_4 + \psline[linewidth=2pt,linecolor=\clr](\featurex,19)(\fixx,20) + \psline[linewidth=2pt,linecolor=\clr](\fixx,20)(\fixx,22) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,22)(\featurex,23) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt,linestyle=dashed]{->}(\fixx,22)(\masterx,23) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,19.5)(\fixx,22.5) + \multido{\nA=20+2}{2}{ + \psset{fillcolor=\clr} + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,\nA) + } + \rput(5.5,19.3){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{fix/error\_4}} + } + % feature/f_1 \renewcommand{\clr}{RoyalBlue} \renewcommand{\fixx}{11} - \psline[linewidth=2pt,linecolor=\clr](\masterx,3)(\fixx,4) - \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,4)(\fixx,12) - \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,3)(\fixx,4) - \rput(\fixx,12.5){ + \psline[linewidth=2pt,linecolor=\clr](\masterx,2)(\fixx,3) + \psline[linewidth=2pt,linecolor=\clr](\fixx,3)(\fixx,5) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,5)(\masterx,6) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,2.5)(\fixx,5.5) + \rput(11.5,2){ \psset{fillcolor=white} \psset{fillstyle=solid} \psset{linecolor=\clr} \psset{framearc=.5} - \psframebox{\textcolor{\clr}{feature/dyn\_mon}} + \psframebox{\textcolor{\clr}{feature/f\_1}} + } + \psset{fillcolor=\clr} + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,3) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,5) + % feature/f_2 + \renewcommand{\fixx}{9} + \psline[linewidth=2pt,linecolor=\clr](\masterx,2)(\fixx,3) + \psline[linewidth=2pt,linecolor=\clr](\fixx,3)(\fixx,7) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,7)(\masterx,8) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,2.5)(\fixx,7.5) + \rput(\fixx,2){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{feature/f\_2}} + } + \psset{fillcolor=\clr} + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,3) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,5) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,7) + % feature/f_3 + \renewcommand{\fixx}{11} + \psline[linewidth=2pt,linecolor=\clr](\masterx,7)(\fixx,8) + \psline[linewidth=2pt,linecolor=\clr](\fixx,8)(\fixx,12) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,12)(\masterx,13) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,7.5)(\fixx,12.5) + \rput(\fixx,7){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{feature/f\_3}} } \psset{fillcolor=\clr} - \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,4) - \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,6) \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,8) \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,10) - % release/NAR_C0 - \renewcommand{\clr}{RedOrange} - \renewcommand{\fixx}{5} - \psline[linewidth=2pt,linecolor=\clr](\masterx,8)(\fixx,9) - \psline[linewidth=2pt,linecolor=\clr](\fixx,9)(\fixx,13) - \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,8)(\fixx,14) - \psline[linewidth=2pt,linecolor=\clr,linestyle=dashed,arrowsize=15pt]{->}(\fixx,13)(\masterx,14) - \rput(\fixx,14.5){ + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,12) + % feature/f_4 + \renewcommand{\fixx}{9} + \psline[linewidth=2pt,linecolor=\clr](\masterx,11)(\fixx,12) + \psline[linewidth=2pt,linecolor=\clr](\fixx,12)(\fixx,14) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,14)(\masterx,15) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,11.5)(\fixx,14.5) + \rput(\fixx,11){ \psset{fillcolor=white} \psset{fillstyle=solid} \psset{linecolor=\clr} \psset{framearc=.5} - \psframebox{\textcolor{\clr}{release/NAR\_C0}} + \psframebox{\textcolor{\clr}{feature/f\_4}} } - \rput(2.5,13){ - \psset{fillcolor=\clr} + \psset{fillcolor=\clr} + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,12) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,14) + % dev_fix/error_5 + \renewcommand{\clr}{Magenta} + \renewcommand{\fixx}{11} + \psline[linewidth=2pt,linecolor=\clr](\masterx,12)(\fixx,13) + \psline[linewidth=2pt,linecolor=\clr](\fixx,13)(\fixx,15) + \psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,15)(\masterx,16) + \psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,12.5)(\fixx,15.5) + \rput(11.5,12.5){ + \psset{fillcolor=white} \psset{fillstyle=solid} \psset{linecolor=\clr} \psset{framearc=.5} - \psframebox{\textcolor{white}{\shortstack{tags/release/\\174\_AG\_NA\_10-01.02}}} + \psframebox{\textcolor{\clr}{fix/error\_5}} } \psset{fillcolor=\clr} - \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,9) - \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,11) \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,13) + \psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,15) + % external release + \renewcommand{\clr}{RedOrange} + \psset{fillcolor=\clr} + \psdot[dotsize=5pt,dotstyle=o,linecolor=\clr](3,23) + \rput(3,24){ + \psset{fillcolor=white} + \psset{fillstyle=solid} + \psset{linecolor=\clr} + \psset{framearc=.5} + \psframebox{\textcolor{\clr}{customer release}} + } + \psset{linecolor=white} + \rput(10.5,25){ + \psframebox{\textcolor{ForestGreen}{Release Canditates}} + } + \rput(10.5,24.5){ + \psframebox{\textcolor{RedOrange}{Customer release}} + } + \rput(10.5,24){ + \psframebox{\textcolor{Maroon}{Error dedected by system test}} + } + \rput(10.5,23.5){ + \psframebox{\textcolor{Magenta}{Error detected while development}} + } + \rput(10.5,23){ + \psframebox{\textcolor{RoyalBlue}{Feature implementation}} + } \end{pspicture}