summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul W. Frields <stickster@gmail.com>2010-12-13 13:38:20 -0500
committerPaul W. Frields <stickster@gmail.com>2010-12-13 13:38:20 -0500
commit67c5b166c93f71758dfe27c4fd89ad299287757a (patch)
tree7334290363aec832c03fe281697600591d5de434
downloadecs-git-test-67c5b166c93f71758dfe27c4fd89ad299287757a.tar.gz
ecs-git-test-67c5b166c93f71758dfe27c4fd89ad299287757a.tar.xz
ecs-git-test-67c5b166c93f71758dfe27c4fd89ad299287757a.zip
Initial commit
-rw-r--r--Makefile17
-rw-r--r--Makefile.custom52
-rw-r--r--combine-art-releng.xsl84
-rw-r--r--combine-docs-releng.xsl84
-rw-r--r--combine-docs-translation.xsl84
-rw-r--r--f-15.tjp2531
-rw-r--r--format-weekly-calendar.py29
-rw-r--r--new-schedule.README-INTERNAL78
-rw-r--r--reports.tji882
-rw-r--r--self-hosting.readme30
10 files changed, 3871 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..2dd23fc
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,17 @@
+CONTENT = f
+MAJOR = 15
+
+PRIOR_RELEASE = f-14
+
+# Custom reports for Fedora (different from internal Red Hat reports)
+# keep them in PWD because reports change for each release.
+# This is an actual file and NOT a symlink to ../../common/reports.tji
+# which is automatically created by Makefile.common if it does not exist
+REPORT = ./reports.tji
+
+# Red Hat Master Make File
+include ../../common/Makefile.common
+
+# Fedora Specific File
+include ./Makefile.custom
+
diff --git a/Makefile.custom b/Makefile.custom
new file mode 100644
index 0000000..a81ecfa
--- /dev/null
+++ b/Makefile.custom
@@ -0,0 +1,52 @@
+# Custom Makefile outside of regular product Makefiles to:
+# 1) Generate a makefile suitable for external/public use providing a self-hosted schedule compliation
+# 2) Publish schedules in Fedora
+# 3) Generate special xsl reports combining two team schedules into one
+#
+#
+# poelstra@redhat.com
+# 2010-10-27
+#
+# Include this file AFTER the program/common/Makefile.common as it depends on some of
+# the variables defined in that file
+#
+# All variables not defined herein are found in ecs/program/common/Makefile.common
+# or ./Makefile
+# Here are their definitions for easy reference (2008-09-06):
+# RELEASE = {CONTENT}-${MAJOR}
+# MASTER = ${RELEASE}.tjp (as a target this builds the schedules)
+# TASKJUGGLER = taskjuggler
+# DEFAULT_INDEX = tasks-overview.html
+# TASKJUGGLERENV = TZ='America/New_York'
+
+
+LOGIN = poelstra
+DESTINATION = fedorapeople.org:~/public_html/schedules
+
+INCLUDE_FILES = reports.tji
+
+# Generate a special makefile for Fedora users to self-host schedule compliation
+Makefile.fedora: all
+ echo "$(RELEASE): $(MASTER) $(INCLUDE_FILES)" > $@
+ echo " $(TASKJUGGLER) $(MASTER)" >> $@
+ echo " " >> $@
+ echo "clean: " >> $@
+ echo " rm -f *~ *.html *.ics *-interface.tji *.tjx" *.csv >> $@
+ xsltproc combine-docs-translation.xsl ${MASTER_XML} > ${RELEASE}-docs-and-trans-tasks.html
+ xsltproc combine-docs-releng.xsl ${MASTER_XML} > ${RELEASE}-docs-and-releng-tasks.html
+
+# target to transfer the files needed for a self-hosted build of the schedule
+# and the html and ics files from a local build
+publish: clean all Makefile.fedora
+ rsync -av ${RELEASE}-*html ${LOGIN}@${DESTINATION}/${RELEASE}/
+ rsync -av ${RELEASE}-*ics ${LOGIN}@${DESTINATION}/${RELEASE}/
+ rsync -av ${MASTER} ${INCLUDE_FILES} ${LOGIN}@${DESTINATION}/${RELEASE}/source
+ rsync -av Makefile.fedora ${LOGIN}@${DESTINATION}/${RELEASE}/source/Makefile
+ rsync -av self-hosting.readme ${LOGIN}@${DESTINATION}/${RELEASE}/source/readme
+
+calendar: clean all
+ for file in `find . -name \*-weekly.csv`; do \
+ echo "processing file: $$file"; \
+ /usr/bin/python format-weekly-calendar.py $$file > $$file.txt; \
+ done;
+ /usr/bin/gedit *csv.txt;
diff --git a/combine-art-releng.xsl b/combine-art-releng.xsl
new file mode 100644
index 0000000..99332cb
--- /dev/null
+++ b/combine-art-releng.xsl
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+ <xsl:output method="html"/>
+
+ <xsl:param name="title">Combined Documentation &amp; Release Engineering Tasks</xsl:param>
+
+ <xsl:template match="/">
+
+ <xsl:variable name="htitle" select="concat (Project/Name, ' ', Project/Version, ' ', $title)"/>
+ <html>
+ <head>
+ <title><xsl:value-of select="$htitle"/></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ </head>
+ <body>
+ <h1><xsl:value-of select="$htitle"/></h1>
+ <table align="center" cellpadding="2" style="background-color:#000000">
+ <thead>
+ <!-- top border -->
+ <tr valign="middle" style="background-color:#8989b2; font-size:110%; font-weight:bold; text-align:center">
+ <td rowspan="2">No.</td>
+ <td rowspan="2">Name</td>
+ <td rowspan="2">Start</td>
+ <td rowspan="2">End</td>
+ <td rowspan="2">Duration</td>
+ </tr>
+
+ </thead>
+
+ <tbody>
+ <xsl:for-each select="//Task[Flag = 'design' or Flag='key']">
+ <xsl:sort select="actualStart"/>
+
+ <xsl:if test="count(self::node()[Flag='design']) + count(self::node()[Flag='key'])">
+ <xsl:element name="tr">
+ <xsl:attribute name="valign">middle</xsl:attribute>
+ <xsl:attribute name="style">
+ <xsl:choose>
+
+ <!-- design color == #89b2b2 -->
+ <!-- key color == #b2b289 -->
+ <!-- design & key share same task == #8989b2 -->
+
+ <!-- Both share same task -->
+ <xsl:when test="count(self::node()[Flag='design']) + count(self::node()[Flag='key']) &gt; 1">background-color: #8989b2;</xsl:when>
+ <!-- design only task -->
+ <xsl:when test="count(self::node()[Flag='key']) = 0">background-color: #89b2b2;</xsl:when>
+
+ <!-- key only -->
+ <xsl:otherwise>background-color: #b2b289;</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td style="text-align:center; "><xsl:value-of select="position()"/></td>
+ <td nowrap="nowrap" style="text-align:left; padding-left:2px; font-size:120%"><xsl:value-of select="Name"/></td>
+ <xsl:choose>
+ <xsl:when test="actualEnd = actualStart">
+ <td style="text-align:center; font-size:90%;" colspan="3"><xsl:value-of select="substring-before(actualStart/@humanReadable, ' ')"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td style="text-align:left; font-size:90%; "><xsl:value-of select="substring-before(actualStart/@humanReadable, ' ')"/></td>
+
+ <td style="text-align:left; font-size:90%; "><xsl:value-of select="substring-before(actualEnd/@humanReadable, ' ')"/></td>
+ <td style="text-align:right; font-size:90%; ">
+ <xsl:value-of select="round ((actualEnd - actualStart) div 864) div 100"/>
+ </td>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ </xsl:if>
+
+ </xsl:for-each>
+ </tbody>
+ </table>
+
+ <p><span style="font-size:0.7em">Created with with <a HREF="http://www.taskjuggler.org">TaskJuggler</a>
+ and <b>combine-design-key.xsl</b></span></p>
+
+ </body>
+ </html>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/combine-docs-releng.xsl b/combine-docs-releng.xsl
new file mode 100644
index 0000000..f083250
--- /dev/null
+++ b/combine-docs-releng.xsl
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+ <xsl:output method="html"/>
+
+ <xsl:param name="title">Combined Documentation &amp; Release Engineering Tasks</xsl:param>
+
+ <xsl:template match="/">
+
+ <xsl:variable name="htitle" select="concat (Project/Name, ' ', Project/Version, ' ', $title)"/>
+ <html>
+ <head>
+ <title><xsl:value-of select="$htitle"/></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ </head>
+ <body>
+ <h1><xsl:value-of select="$htitle"/></h1>
+ <table align="center" cellpadding="2" style="background-color:#000000">
+ <thead>
+ <!-- top border -->
+ <tr valign="middle" style="background-color:#8989b2; font-size:110%; font-weight:bold; text-align:center">
+ <td rowspan="2">No.</td>
+ <td rowspan="2">Name</td>
+ <td rowspan="2">Start</td>
+ <td rowspan="2">End</td>
+ <td rowspan="2">Duration</td>
+ </tr>
+
+ </thead>
+
+ <tbody>
+ <xsl:for-each select="//Task[Flag = 'docs' or Flag='releng']">
+ <xsl:sort select="actualStart"/>
+
+ <xsl:if test="count(self::node()[Flag='docs']) + count(self::node()[Flag='releng'])">
+ <xsl:element name="tr">
+ <xsl:attribute name="valign">middle</xsl:attribute>
+ <xsl:attribute name="style">
+ <xsl:choose>
+
+ <!-- Docs color == #89b2b2 -->
+ <!-- releng color == #b2b289 -->
+ <!-- Docs & releng share same task == #8989b2 -->
+
+ <!-- Both share same task -->
+ <xsl:when test="count(self::node()[Flag='docs']) + count(self::node()[Flag='releng']) &gt; 1">background-color: #8989b2;</xsl:when>
+ <!-- Docs only task -->
+ <xsl:when test="count(self::node()[Flag='releng']) = 0">background-color: #89b2b2;</xsl:when>
+
+ <!-- releng only -->
+ <xsl:otherwise>background-color: #b2b289;</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td style="text-align:center; "><xsl:value-of select="position()"/></td>
+ <td nowrap="nowrap" style="text-align:left; padding-left:2px; font-size:120%"><xsl:value-of select="Name"/></td>
+ <xsl:choose>
+ <xsl:when test="actualEnd = actualStart">
+ <td style="text-align:center; font-size:90%;" colspan="3"><xsl:value-of select="substring-before(actualStart/@humanReadable, ' ')"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td style="text-align:left; font-size:90%; "><xsl:value-of select="substring-before(actualStart/@humanReadable, ' ')"/></td>
+
+ <td style="text-align:left; font-size:90%; "><xsl:value-of select="substring-before(actualEnd/@humanReadable, ' ')"/></td>
+ <td style="text-align:right; font-size:90%; ">
+ <xsl:value-of select="round ((actualEnd - actualStart) div 864) div 100"/>
+ </td>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ </xsl:if>
+
+ </xsl:for-each>
+ </tbody>
+ </table>
+
+ <p><span style="font-size:0.7em">Created with with <a HREF="http://www.taskjuggler.org">TaskJuggler</a>
+ and <b>combine-docs-releng.xsl</b></span></p>
+
+ </body>
+ </html>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/combine-docs-translation.xsl b/combine-docs-translation.xsl
new file mode 100644
index 0000000..f0af1ad
--- /dev/null
+++ b/combine-docs-translation.xsl
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+ <xsl:output method="html"/>
+
+ <xsl:param name="title">Combined Documentation &amp; Translation Tasks</xsl:param>
+
+ <xsl:template match="/">
+
+ <xsl:variable name="htitle" select="concat (Project/Name, ' ', Project/Version, ' ', $title)"/>
+ <html>
+ <head>
+ <title><xsl:value-of select="$htitle"/></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ </head>
+ <body>
+ <h1><xsl:value-of select="$htitle"/></h1>
+ <table align="center" cellpadding="2" style="background-color:#000000">
+ <thead>
+ <!-- top border -->
+ <tr valign="middle" style="background-color:#8989b2; font-size:110%; font-weight:bold; text-align:center">
+ <td rowspan="2">No.</td>
+ <td rowspan="2">Name</td>
+ <td rowspan="2">Start</td>
+ <td rowspan="2">End</td>
+ <td rowspan="2">Duration</td>
+ </tr>
+
+ </thead>
+
+ <tbody>
+ <xsl:for-each select="//Task[Flag = 'docs' or Flag='translation']">
+ <xsl:sort select="actualStart"/>
+
+ <xsl:if test="count(self::node()[Flag='docs']) + count(self::node()[Flag='translation'])">
+ <xsl:element name="tr">
+ <xsl:attribute name="valign">middle</xsl:attribute>
+ <xsl:attribute name="style">
+ <xsl:choose>
+
+ <!-- Docs color == #89b2b2 -->
+ <!-- Translation color == #b2b289 -->
+ <!-- Docs & Translation share same task == #8989b2 -->
+
+ <!-- Both share same task -->
+ <xsl:when test="count(self::node()[Flag='docs']) + count(self::node()[Flag='translation']) &gt; 1">background-color: #8989b2;</xsl:when>
+ <!-- Docs only task -->
+ <xsl:when test="count(self::node()[Flag='translation']) = 0">background-color: #89b2b2;</xsl:when>
+
+ <!-- Translation only -->
+ <xsl:otherwise>background-color: #b2b289;</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td style="text-align:center; "><xsl:value-of select="position()"/></td>
+ <td nowrap="nowrap" style="text-align:left; padding-left:2px; font-size:120%"><xsl:value-of select="Name"/></td>
+ <xsl:choose>
+ <xsl:when test="actualEnd = actualStart">
+ <td style="text-align:center; font-size:90%;" colspan="3"><xsl:value-of select="substring-before(actualStart/@humanReadable, ' ')"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td style="text-align:left; font-size:90%; "><xsl:value-of select="substring-before(actualStart/@humanReadable, ' ')"/></td>
+
+ <td style="text-align:left; font-size:90%; "><xsl:value-of select="substring-before(actualEnd/@humanReadable, ' ')"/></td>
+ <td style="text-align:right; font-size:90%; ">
+ <xsl:value-of select="round ((actualEnd - actualStart) div 864) div 100"/>
+ </td>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ </xsl:if>
+
+ </xsl:for-each>
+ </tbody>
+ </table>
+
+ <p><span style="font-size:0.7em">Created with with <a HREF="http://www.taskjuggler.org">TaskJuggler</a>
+ and <b>combine-docs-translation.xsl</b></span></p>
+
+ </body>
+ </html>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/f-15.tjp b/f-15.tjp
new file mode 100644
index 0000000..4c4b0e4
--- /dev/null
+++ b/f-15.tjp
@@ -0,0 +1,2531 @@
+/*
+* John Poelstra <poelstra@fedoraproject.org>
+* Fedora 15
+*/
+
+
+macro major [15] # Current release version
+macro previous_major[14] # Last release version
+macro next_major [16] # Next release version
+macro content [f] # do not change this
+macro content_title [Fedora] # do not change this
+macro start_date [2010-11-02] # GA date of previous release
+macro start_work [2010-11-03] # set to one day after "start_date"
+macro end_date [2011-12-30]
+macro id [$Id: f-15.tjp,v 1.11 2010/12/03 22:49:12 poelstra Exp $]
+macro state [$State: Exp $]
+macro prior_project [f14]
+
+project ${content}${major} "${content_title}" "${major}" ${start_date} - ${end_date} {
+ timeformat "%Y-%b-%d"
+
+ # Based on Eastern time zone in USA
+ timezone "America/New_York"
+
+ # Setup scenarios
+ scenario plan "Original Plan" {
+ scenario actual "Actual"
+ }
+
+ # Limit working days
+ workinghours sat,sun off
+}
+
+include "reports.tji"
+
+# ========= Cornerstones of Fedora Schedules =============
+# This section also serves as a "syle guide" for the source file too
+
+/*
+1) EVERY entry should be in the following line order and indented consistently with the rest of the file. This makes the source file consistent and eaiser to read.
+ a) task name and description
+ b) dependency (if applicable)
+ c) length (not "duration") (if applicable)
+ d) flags (if applicable)
+
+2) Time driven unless specified differently during planning
+
+3) "Deadlines" (previously known as "Freezes") and releases always happen on Tuesdays. Tuesday has been determined to be the best day for Press announcements and kept for deadlines to maintain historical consistency.
+
+4) Official Release Engineering Composes happen on Thursdays, except for the final release
+
+5) Syncing releases to mirrors ideally happens on Thursdays... end of day on Friday is worst case
+
+6) Most tasks are scheduled with 'length' instead of 'duration' to get a sense of "work days" required--using 'length' one week = 5 days
+--an eternal debate could be held to discuss whether or not schedule cacluations
+should include weekends because community members work at all times and not within strict work days.
+
+7) There is little to no benefit found in including a holiday.tji file for Fedora. In some cases it made the scheduling more complicated
+
+8) Use "length" everywhere and "duration" only when something must take into account a weekend day
+
+9) All "Blocker Bug Days" should be on Fridays
+
+10) If a task takes one day or less--schedule with no length--this way it showes up as a milestone and gets included in iCalendar (ics) file
+
+11) Because of bugs in the way TaskJuggler ics files get rendered in some calendars (e.g. Zimbra) we only include zero length (milestone) tasks in the ics file. As a result there are several duplicate tasks with no length that have been added so they appear in the ics file.
+
+12) There are five primary projects the Fedora Translation team works on:
+a) Software localization
+b) Guides localization
+c) Release Notes localization
+d) Website localization
+e) Release banner localization
+
+13) Use core schedule milestones (flags = key) as anchor points (depends/precedes) for tasks in this schedule file instead of more transient tasks like meetings, compose dates, etc. that may change (or slip) from release to release. This makes building new release schedules easier and require less maintenance and updating.
+
+14) In ALL but limited cases task beginning and ending should be automatically calculated based on logic in this file. When using hard coded dates, explicitly call them out with a comment to hightlight their existence. Hard coded dates are particularly troublesome when slipping a schedule or branching the file to create a new release schedule because they must be adjusted and recalculated manually
+
+15) TaskJuggler does not provide an easy way (that I am aware of) to schedule tasks to happen *before* other tasks. I've created a hack/methodology I call "shadow" tasks. These are unreported tasks that go backwards a certain period of time and serve as an anchor or starting point for the actual task to be reported.
+
+16) Slipping a particular release milstone, but then holding the rest of the schedule to its original dates requires a lot of tedious tweaking and is a real hassle--it usual results in a slip any way. Fedora has a poor history of being able absorb slips and it usually results in a slip later in the release cycle. This is because the time period between Alpha Deadline and the final release has already been compressed as much as possible.
+
+17) The "milestone" declaration is NOT used in this source file. It is redundant and unnecessary. Do not inlude it. All tasks without 'length' or 'duration' are automatically considered "milestone" tasks.
+
+18) Keep the indentation and alignment consistent throughout the file--it makes it easier to read and grok
+ a) select all the text in the source file
+ b) Tools/Clean Indention
+ c) Tools/Align
+
+*/
+
+# ============ What should be included in TaskJuggler? ==============
+/*
+e.g. Tasks that *should* be tracked in this schedule vs. subgroup ticketing or task systems
+1) Inter-team dependencies. For example Docs team release-notes.rpm or Artwork team packages needed by Release Eng for complete distro creation.
+
+2) Significant tasks that are important for other groups to be aware of
+
+3) Tasks critical to releasing a new version of Fedora. For example, composing test releases, testing releases, syncing the release to the mirrors, etc.
+
+4) Tasks that must be completed for a quality release--"nice to have" items should tracked elswhere and clutter the schedule
+
+5) In general we have found it to be ineffective to create overly-detailed schedules for the subteams because they are hard to maintain and the ROI appears to be low
+*/
+
+# ============ How to Build a scheduled for a new release ==============
+/*
+It has worked really well to roll the current release TaskJuggler source file forward (copy/paste) to the next version
+and then modify it from there. I usually branch a new TaskJuggler source file for the next release approximately one
+month before GA.
+
+Once branched I make sure that any important structural changes to the current schedule get reflected in the new one.
+
+Changing the release methodology--length between different milestones and deadlines--every new release has been a a lot of work to make sure all the individual team schedules continue to work properly. This is because many of the team schedules are anchored to key milestones and deadlines. From Fedora 13 to 14 the methodology remained the same which made creating the Fedora 14 schedule much easier. New schedule methodology should be tried out for at least two releases in a row before changing unless a serious deficency is identified..
+
+Here is my step-by-step process:
+
+1) Copy f-<release-version>.tjp to f-<new-release-version>.tjp (maintain same file and folder naming)
+
+2) Remove all task length designations of "planned" and "actual" (used to reflect delta from original plan) so that there is only one length/duration declaration--"planned" is the default if not specified and this gets you back to the baseline schedule before it slipped.
+
+3) Adjust planning duration and recalculate schedule until desired GA date is reached
+--this is a somewhat strange way to design a schedule, but the full methodology is described here
+http://fedoraproject.org/wiki/LifeCycle
+
+4) Search source for all instances of "# ADJUST FOR NEW RELEASE" and "# KEY ADJUSTMENT POINT"--these are tasks that may need their length manually adjusted so they land on the right day or the description adjusted. They should also be considered if the schedule slips.
+
+5) Fix all of the macros at the start of the file to reflect the correct release information
+
+6) Update the html reports headers to reflect the two correct past releases: "macro all_navbar"
+
+
+
+
+# =============== TODO: Unifinished Items ================ #
+/*
+
+1)
+2)
+
+*/
+
+
+task ${content}${major} "${content_title} ${major}" {
+
+ start ${start_work}
+
+ task first_day "First Day of Development" {
+ flags hidden
+ }
+
+ # This task is required for the Product Pages
+ # taskid and description should not be changed
+ task PlanningPhase "Planning Phase" {
+
+ # add for ical
+ task start_features_cal "Start Feature Submission" {
+ flags key, pm, roadmap
+ }
+
+ task rawhide_spins "Start Nightly Spins Compose Based on Rawhide" {
+ depends !!first_day {gaplength 5d}
+ flags spins
+ }
+
+ # ADJUST FOR NEW RELEASE
+ # HARDCODED date--approximately 2 weeks after GA of previous release
+ task file_ticket "File ticket with RHT Eng-ops for Fedora 12 EOL bugzilla closure" {
+ start 2010-11-16
+ flags pm
+ }
+
+ # ADJUST FOR NEW RELEASE
+ # HARDCODED date--approximately 4 weeks after GA of previous release
+ # this date is approved FESCo in accordance with https://fedoraproject.org/wiki/LifeCycle
+ # The process behind this task is at: https://fedoraproject.org/wiki/BugZappers/HouseKeeping
+ task fedora12_eol "RHT Eng-Ops Fedora 12 EOL auto closure" {
+ start 2010-12-02
+ flags pm, key
+ }
+
+ task clean_market_wiki "Cleanup Marketing wiki from previous releases" {
+ depends !start_features_cal {gaplength 25d}
+ length 5d
+ flags marketing
+ }
+
+ task cycle_market_wiki "Cycle Marketing wiki pages for current release" {
+ depends !start_features_cal {gaplength 25d}
+ length 5d
+ flags marketing
+ }
+
+ # ADJUST FOR NEW RELEASE
+ # HARDCODED dates for FUDCon
+ task fudcon "Fudcon Fedora 15--Tempe, Arizona" {
+ start 2011-01-29-01:00-EST # specifying time helps them to land on specified dates
+ end 2011-01-31-23:00-EST
+ flags quality, releng, docs, design, pm, translation, proto, proto, devel, key, marketing
+ }
+
+ task bug_trackers "Create Tracker Bugs" {
+ flags pm
+ note "See details at https://fedoraproject.org/wiki/BugZappers/HouseKeeping/FirstDayDevel"
+ }
+
+ # FIXME: make sure this lines up right in light of proposed design schedule 2010-11-08
+ task design_concept "Conceptual Design Phase" {
+ length 30d
+ flags design
+ }
+
+ # FIXME: make sure this lines up right in light of proposed design schedule 2010-11-08
+ # FIXME: make sure this lines up right and reconsider if calculation could be automatic
+ # ADJUST FOR NEW RELEASE
+ # a solid start for the wallpaper is the goal for alpha
+ # adjust length so packaging end date lands on Alpha Deadline
+ task wallpaper_design "Wallpaper Design for Alpha" {
+ depends !design_concept
+ length 15d
+ flags design
+ }
+
+ } # E N D of PlanningPhase
+
+
+ task supplement_wallpaper "Supplemental Wallpaper Process" {
+ flags design
+
+ # ADJUST FOR NEW RELEASE
+ # adjust length of this task so that 'package_supplemental_wallpaper' ends on Beta Deadline
+ task supplement_wallpaper_submit "Supplemental Wallpaper Submission Period" {
+ length 62d
+ }
+
+ task decide_supplement_wallpaper "Select Official Supplemental Wallpaper" {
+ depends !supplement_wallpaper_submit
+ }
+
+ task supplement_license_review "Verify Supplemental Wallpaper Licenses" {
+ depends !decide_supplement_wallpaper {gaplength 1d}
+ length 10d
+ }
+
+ task package_supplemental_wallpaper "Package Supplemental Wallpaper" {
+ depends !supplement_license_review
+ length 2d
+ }
+
+ } # end supplemental wallpaper
+
+
+ # This task is required for the Product Pages
+ # taskid and description should not be changed
+ task DevelopmentPhase "Development Phase" {
+ start ${start_work}
+
+ task devel_start "Start Development" {
+ flags devel
+ }
+
+ # ADJUST FOR NEW RELEASE--IMPORTANT
+ # The length of this task DRIVES THE ENTIRE SCHEDULE
+ # and determines when the testing phases starts. The testing
+ # phase of the schedule is static (and completely automatically
+ # generated by TaskJuggler) from release to release, but the
+ # number of days of development varies depending when the previous
+ # release ended (GA). As a result the length of this task also
+ # influences where the GA date lands.
+ # Each "5d" (5 days) is equivalent to one week.
+ task develop "Packaging and Development (precedes Alpha)" {
+ length 75d
+ flags devel, proto
+ }
+
+ # This task is required for the Product Pages
+ # taskid and description should not be changed or displayed
+ task export_freeze "Requirements Freeze" {
+ depends !develop
+ flags hidden
+ }
+
+ } # E N D of DevelopmentPhase
+
+ task TestingPhase "Testing Phase" {
+
+ task alpha "Alpha Release" {
+
+ task shadow_alpha_blocker "SHADOW: anchor for first blocker meeting" {
+ precedes !feature_freeze {gaplength 11d}
+ flags hidden
+ }
+
+ task remind_alpha_blocker1 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #1" {
+ depends !shadow_alpha_blocker {gaplength 3d}
+ flags pm
+ }
+
+ task alpha_blocker1 "Alpha Blocker Meeting (${content}${major}alpha) #1" {
+ depends !shadow_alpha_blocker {gaplength 5d}
+ flags releng, quality, devel, blocker, pm
+ }
+
+ task remind_alpha_blocker2 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #2" {
+ depends !alpha_blocker1 {gaplength 3d}
+ flags pm
+ }
+
+ task alpha_blocker2 "Alpha Blocker Meeting (${content}${major}alpha) #2" {
+ depends !alpha_blocker1 {gaplength 5d}
+ flags releng, quality, devel, blocker, pm
+ }
+
+ # raise awareness one week before Alpha compose
+ task daily_alpha_blocker "Daily Review & Notification of Open Alpha Blocker Bugs" {
+ depends !alpha_blocker2 {gaplength 1d}
+ length 4d
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task remind_alpha_blocker3 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #3" {
+ depends !alpha_blocker2 {gaplength 3d}
+ flags pm
+ }
+
+ task alpha_blocker3 "Alpha Blocker Meeting (${content}${major}alpha) #3" {
+ depends !alpha_blocker2 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task remind_alpha_blocker4 "Reminder: Alpha Blocker Meeting (${content}${major}alpha) #4" {
+ depends !alpha_blocker3 {gaplength 3d}
+ flags pm
+ }
+
+ task alpha_blocker4 "Alpha Blocker Meeting (${content}${major}alpha) #4" {
+ depends !alpha_blocker3 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ # placeholder if slip--otherwise comment out
+ /*
+ task alpha_blocker5 "Alpha Blocker Meeting (${content}${major}alpha) #5" {
+ depends !alpha_blocker4 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+ */
+
+ # Feature Freeze is one week before Alpha Change Deadline
+ # Automatically calculated based on Alpha Change Deadline
+ task shadow_feature_freeze "SHADOW: Anchor Feature Freeze" {
+ precedes !alpha_deadline {gaplength 6d}
+ flags hidden
+ }
+
+ task feature_freeze "Feature Freeze (Testable|Complete)" {
+ depends !shadow_feature_freeze
+ flags releng, quality, pm, proto, devel, key, marketing, roadmap, fpl
+ }
+
+ task feature_freeze_deadline_announce "Announce Feature Freeze Reached" {
+ depends !feature_freeze
+ flags pm
+ }
+
+ task alpha_deadline_remind "Remind Alpha Deadline in 1 week" {
+ depends !feature_freeze
+ flags pm
+ }
+
+ task spins_freeze "Spins Freeze--All ${content_title} ${major} Spins Identified" {
+ depends !shadow_feature_freeze
+ flags releng, quality, pm, proto, devel, key, marketing, spins, fpl
+ }
+
+ task talking_points "Create Talking Points" {
+ depends !feature_freeze {gaplength 6d}
+ length 5d
+ flags marketing
+ }
+
+ task release_slogan "Create Release Slogan" {
+ depends !talking_points
+ length 5d
+ flags marketing
+ }
+
+ task legal_release_slogan "Legal Review of Slogan" {
+ depends !release_slogan
+ length 3d
+ flags marketing, fpl
+ }
+
+ task announce_release_slogan "Announce Fedora ${major} Slogan" {
+ depends !legal_release_slogan
+ flags marketing, fpl
+ }
+
+ task feature_profiles "Feature Profiles" {
+ depends !release_slogan
+ length 20d
+ flags marketing
+ }
+
+ # Branch on the same Tuesday as Feature Freeze
+ task branch_rawhide "Branch Fedora ${major} from Rawhide" {
+ depends !shadow_feature_freeze
+ flags releng, devel, pm, proto, key, roadmap, fpl
+ }
+
+ task bugzilla_descrption "Reflect supported versions in Bugzilla product description" {
+ depends !shadow_feature_freeze
+ flags pm
+ }
+
+ task rawhide_rebase "Rebase Rawhide bugs to Fedora ${major}" {
+ depends !shadow_feature_freeze
+ flags pm
+ }
+
+ # Create anchor for three weeks before for Feature Submission
+ task shadow_feature_submit_remind_3_weeks "SHADOW: Three Weeks Before Feature Submission" {
+ precedes !feature_submission_deadline {gaplength 15d}
+ flags hidden
+ }
+
+ # Three weeks before Feature Submission Deadline
+ task feature_check_remind "Request Feature Status Updates + Remind Submit Deadline" {
+ depends !shadow_feature_submit_remind_3_weeks
+ flags devel, pm
+ }
+
+ task alpha_releng_tickets "File All Release Engineering Tickets for ${content_title} ${major} Alpha" {
+ depends !shadow_feature_submit_remind_3_weeks {gaplength 3d}
+ flags releng
+ }
+
+ task feature_submit_remind_2_weeks "Feature Submission Deadline Two Weeks away" {
+ depends !shadow_feature_submit_remind_3_weeks {gaplength 6d}
+ flags devel, pm
+ }
+
+ #two weeks before spins submission deadilen get wiki pages in order
+ task spins_wiki_update "Update All Spins Wiki Pages From Previous Releases" {
+ depends !shadow_feature_submit_remind_3_weeks
+ flags spins
+ }
+
+ task feature_submit_remind_1_week "Feature Submission Deadline One Week away" {
+ depends !shadow_feature_submit_remind_3_weeks {gaplength 11d}
+ flags devel, pm
+ }
+
+ # One day before compose
+ task alpha_installer_build1 "Submit Installer Build for QA Compose" {
+ depends !feature_submit_remind_1_week {gaplength 1d}
+ flags devel
+ }
+
+ # Thursday before Feature Submission deadline
+ task qa_alpha_compose1 "Create Installable Images for QA testing #1" {
+ depends !feature_submit_remind_1_week {gaplength 2d}
+ flags releng
+ }
+
+ task alpha_rawhide_install1 "Pre-Alpha Rawhide Acceptance Test Plan #1" {
+ depends !qa_alpha_compose1
+ length 6d
+ flags quality
+ }
+
+ # Create anchor for two weeks before Feature Freeze
+ task shadow_feature_submission_deadline "SHADOW: Two weeks before Feature Freeze" {
+ precedes !feature_freeze {gaplength 10d}
+ flags hidden
+ }
+
+ task feature_submission_deadline "Feature Submission Deadline" {
+ depends !shadow_feature_submission_deadline
+ flags releng, quality, pm, proto, devel, key, roadmap, fpl
+ }
+
+ task feature_submission_deadline_announce "Announce Feature Submission Closed" {
+ depends !shadow_feature_submission_deadline
+ flags pm
+ }
+
+ task spins_submission_deadline "Custom Spins Submission Deadline" {
+ depends !shadow_feature_submission_deadline
+ flags pm, proto, key, spins, fpl
+ }
+
+ task warn_rawhide_rebase "Rawhide Rebase Warning to Package Maintainers" {
+ depends !shadow_feature_submission_deadline
+ flags pm
+ }
+
+ task ticket_rawhide_rebase "File Rawhide Rebase ticket with RHT Eng-ops" {
+ depends !shadow_feature_submission_deadline
+ flags pm
+ }
+
+ # One day before compose
+ task alpha_installer_build2 "Submit Installer Build for QA Compose" {
+ depends !feature_submission_deadline {gaplength 2d}
+ flags devel
+ }
+
+ task qa_alpha_compose2 "Create Installable Images for QA testing #2" {
+ depends !feature_submission_deadline {gaplength 3d}
+ flags releng
+ }
+
+ task alpha_rawhide_install2 "Pre-Alpha Rawhide Acceptance Test Plan #2" {
+ depends !qa_alpha_compose2
+ length 5d
+ flags quality
+ }
+
+ # One day before compose
+ task alpha_installer_build3 "Submit Installer Build for QA Compose" {
+ depends !qa_alpha_compose2 {gaplength 4d}
+ flags devel
+ }
+
+ task qa_alpha_compose3 "Create Installable Images for QA testing #3" {
+ depends !alpha_rawhide_install2
+ flags releng
+ }
+
+ task alpha_rawhide_install3 "Pre-Alpha Rawhide Acceptance Test Plan #3" {
+ depends !qa_alpha_compose3
+ length 5d
+ flags quality
+ }
+
+ task feature_incomplete_nag "Remind < 85% complete Feature Owners" {
+ depends !feature_freeze {gaplength 1d}
+ flags pm
+ }
+
+ task feature_incomplete_fesco "Deliver Incomplete Features to FESCo " {
+ depends !feature_freeze {gaplength 6d}
+ flags pm
+ }
+
+ # KEY ADJUSTMENT POINT
+ # Date of Alpha Deadline depends on length of development
+ task alpha_deadline "Alpha Change Deadline" {
+ depends !!!DevelopmentPhase.develop
+ flags releng, quality, pm, devel, key, roadmap, proto, blocker, spins
+ }
+
+ task alpha_deadline_announce "Announce Alpha Change Deadline Reached" {
+ depends !alpha_deadline
+ flags pm
+ }
+
+ # KEY ADJUSTMENT POINT--manually adjust if length of time before Alpha ships changes
+ task alpha_infrastructure_freeze "Alpha Infrastructure Change Freeze" {
+ depends !alpha_deadline
+ length 10d
+ flags infrastructure
+ }
+
+ task alpha_spins_ks "Build spin-kickstarts package from master" {
+ depends !alpha_deadline
+ flags spins
+ }
+
+ # Happens the same day as Feature Freeze
+ task orphan "Orphan Rawhide Packages" {
+ depends !feature_freeze
+ flags releng, devel
+ }
+
+ task finalize_alpha_wallpaper "Finalize Alpha Wallpaper" {
+ depends !!!PlanningPhase.wallpaper_design
+ flags design, pm
+ length 3d
+ }
+
+ task alpha_wallpaper_deadline "Alpha Wallpaper Deadline" {
+ depends !finalize_alpha_wallpaper
+ flags design
+ }
+
+ task blog_alpha_wallpaper "Blog About Alpha Wallpaper" {
+ depends !finalize_alpha_wallpaper
+ flags design
+ }
+
+ # must land a few days before Alpha compose by Releng
+ task package_alpha_wallpaper "Package Alpha Wallpaper" {
+ depends !finalize_alpha_wallpaper
+ length 2d
+ flags design
+ }
+
+ task alpha_wallpaper_feedback "Solicit Feedback on Alpha Wallpaper" {
+ depends !package_alpha_wallpaper
+ length 10d
+ flags design
+ }
+
+ # depends on nearly complete version of the wallpaper, otherwise
+ # you have to create the splashes twice
+ # work on until Beta freeze
+ task start_splash_screens "Create Splash Screens" {
+ depends !alpha_drop
+ length 9d
+ flags design
+ }
+
+ # for ics file
+ task start_splash_screens_cal "Start Splash Screens" {
+ depends !alpha_drop
+ flags design
+ }
+
+ # work on until Beta freeze
+ task finalize_splash_screens "Finalize Splash Screens" {
+ depends !start_splash_screens
+ length 4d
+ flags design
+ }
+
+ # work on until Beta freeze
+ task beta_wallpaper "Prepare wallpaper for Beta" {
+ depends !alpha_drop
+ length 13d
+ flags design
+ }
+
+ # send reminder on Monday before Wednesday meeting
+ task remind_alpha_go_not "Reminder: ${content_title} ${major} Alpha Go/No-Go Meeting" {
+ depends !create_alpha_compose {gaplength 2d}
+ flags pm
+ }
+
+ task alpha_go_not "${content_title} ${major} Alpha Go/No-Go Meeting (17:00 US Eastern)" {
+ depends !create_alpha_compose {gaplength 4d}
+ flags releng, quality, devel, pm, proto, blocker
+ }
+
+ task trans_software_rebuild1 "Remind f-dev-announce to Rebuild All Translated Packages" {
+ depends !feature_freeze {gaplength 5d }
+ flags translation
+ }
+
+ task software_string_freeze "Software String Freeze" {
+ depends !feature_freeze {gaplength 6d }
+ flags devel, translation, pm, proto, releng, key, roadmap
+ }
+
+ task announce_software_string_freeze "Announce Software String Freeze Reached" {
+ depends !feature_freeze {gaplength 6d }
+ flags pm
+ }
+
+ task software_translation "Software Translation"{
+
+ # KEY ADJUSTMENT POINT
+ # if the alpha slips, add additional time to this task
+ # TODO: reconsider this task in Fedora 15--it seems that it should be a by-product of the other
+ # tasks and not a stand-alone task
+ task trans_software "Software Translation Period" {
+ depends !!software_string_freeze
+ length 25d
+ flags translation
+ }
+
+ # KEY ADJUSTMENT POINT
+ # If the alpha slips, add additional time to 'gaplength' for this task which essentially extends the freeze
+ task remind_build_trans_software "Remind f-dev-announce to build F${major} collection pkgs for trans team" {
+ depends !!software_string_freeze {gaplength 9d}
+ flags translation
+ }
+
+ task request_review_image "Create Rel-Eng ticket for Live Image compose for Software Review UI" {
+ depends !remind_build_trans_software {gaplength 4d}
+ flags translation
+ }
+
+ task build_trans_software "Build F-${major} collection packages for all language translators" {
+ depends !request_review_image
+ flags releng, devel
+ }
+
+ task compose_review_image "Compose of Live Image of Software Review UI for Translation" {
+ depends !build_trans_software
+ flags releng
+ }
+
+ task trans_software_review "Review and correct software translation in built UI" {
+ depends !build_trans_software {gaplength 1d}
+ length 6d
+ flags translation
+ }
+
+ task trans_software_rebuild2 "Remind f-dev-announce to Rebuild All Translated Packages" {
+ depends !trans_software_review
+ flags translation
+ }
+
+ # Should land one week before the "Beta Change Deadline"--affected by "remind_build_trans_software"
+ # Double check after adjusting "trans_software" or length of Alpha tasks for a slip
+ task trans_software_deadline "Software: Translation Deadline (PO Files complete)" {
+ depends !trans_software_review
+ flags translation, roadmap, key
+ }
+
+ # for ical file
+ task start_trans_rebuild "Software: Start Rebuild all translated packages" {
+ depends !trans_software_deadline
+ flags devel
+ }
+
+ task trans_rebuild "Software: Rebuild all translated packages" {
+ depends !trans_software_deadline
+ length 5d
+ flags devel
+ }
+
+ } #end software_translation
+
+ # Send reminder on Monday before Thursday meeting
+ task alpha_meeting_reminder "Reminder: Alpha Release Readiness Meeting" {
+ depends !feature_freeze {gaplength 10d}
+ flags pm
+ }
+
+ task alpha_meeting "${content_title} ${major} Alpha Release Readiness Meeting" {
+ depends !alpha_meeting_reminder {gaplength 3d}
+ flags releng, pm, quality, docs, design, translation, marketing, web
+ }
+
+ # land on a Tuesday
+ task shadow_before_alpha_compose "SHADOW: 1.5 weeks before Alpha Compose" {
+ precedes !create_alpha_compose {gaplength 8d}
+ flags hidden
+ }
+
+ task create_alpha_tc "Create Alpha Test Compose (TC)" {
+ depends !shadow_before_alpha_compose
+ flags releng, proto
+ }
+
+ # test Wed to Wed
+ task test_alpha_tc "Test Alpha 'Test Compose'" {
+ depends !create_alpha_tc {gaplength 1d}
+ length 6d
+ flags quality, proto
+ }
+
+ task alpha_kernel_build "Submit Kernel Build for Alpha RC Compose" {
+ depends !alpha_deadline
+ flags devel
+ }
+
+ task alpha_installer_build "Submit Installer Build for Alpha RC Compose" {
+ depends !alpha_deadline {gaplength 1d}
+ flags devel
+ }
+
+ task create_alpha_compose "Compose Alpha Candidate" {
+ depends !alpha_deadline {gaplength 2d}
+ flags releng, proto
+ }
+
+ task test_alpha_candidate "Test Alpha Candidate" {
+ depends !create_alpha_compose
+ length 5d
+ flags quality, proto
+ }
+
+ # for ical file
+ task start_stage_alpha "Start Stage & Sync Alpha to Mirrors" {
+ depends !test_alpha_candidate
+ flags releng
+ }
+
+ task notify_mirrors_alpha "Notify Mirrors of ${content_title} ${major} Alpha" {
+ depends !start_stage_alpha {gaplength 1d}
+ flags releng
+ }
+
+ task stage_alpha "Stage & Sync Alpha to Mirrors" {
+ depends !test_alpha_candidate
+ length 3d
+ flags releng, proto
+ }
+
+ task alpha_export_control "Alpha Export Control Reporting" {
+ depends !start_stage_alpha {gaplength 1d}
+ flags releng, pm
+ }
+
+ task alpha_announce "Create Alpha Announcement (Marketing & Docs)" {
+ depends !alpha_meeting
+ length 2d
+ flags docs, marketing
+ }
+
+ task alpha_drop "Alpha Public Availability" {
+ depends !stage_alpha
+ flags releng, docs, quality, design, pm, proto, devel, key, marketing, roadmap, spins, blocker, infrastructure, fpl
+ }
+
+ task ambassador_start "Ambassador Wide Meetings Preparing For ${content_title} ${major}" {
+ depends !alpha_drop {gaplength 7d}
+ length 5d
+ flags ambassadors
+ }
+
+ task start_swag "Call From FAmSCo and Regional teams for Preparation of Media/SWAG" {
+ depends !alpha_drop {gaplength 7d}
+ flags ambassadors
+ }
+
+ task swag_poc "Regional Team Meetings and Select POC for Swag/Media production" {
+ depends !alpha_drop {gaplength 8d}
+ length 5d
+ flags ambassadors
+ }
+
+ task swag_funding_request "Submit Funding Request For Swag/Media Production" {
+ depends !alpha_drop {gaplength 8d}
+ length 5d
+ flags ambassadors
+ }
+
+ # this task was proposed by Mike McGrath and to be performed by FES
+ task nvr_testing "NVR Update Check testing" {
+ depends !stage_alpha
+ length 1d
+ flags quality
+ }
+
+ # KEY ADJUSTMENT POINT
+ task alpha_release_notes "Alpha Release Notes" {
+
+ # create for ical
+ task start_alpha_beats "Start Alpha Beat and Feature Page Review" {
+ depends !!feature_freeze {gaplength 11d}
+ flags docs, quality
+ }
+
+ task validate_beat_writers "Validate Former Beat Writers" {
+ depends !!feature_freeze
+ length 5d
+ flags docs
+ }
+
+ task recruite_beat_writers "Recruit New Beat Writers" {
+ depends !validate_beat_writers
+ length 5d
+ flags docs
+ }
+
+ task comb_alpha_beats "Comb Beats and Feature Pages for Alpha" {
+ depends !start_alpha_beats
+ length 2d
+ flags docs, quality
+ }
+
+ task notify_devel_relnotes "Notify Development About Alpha Release Notes" {
+ depends !!alpha_deadline
+ flags docs
+ }
+
+ # KEY ADJUSTMENT POINT
+ # Beta release notes depend on this task
+ # If alpha candidate is not ready on time add extra time for the release notes here
+ task prep_alpha_notes "Prepare Alpha Release Notes (1 page)" {
+ depends !comb_alpha_beats
+ length 1d
+ flags docs, quality
+ }
+
+ task post_notes "Post Alpha Release Notes One-Page" {
+ depends !prep_alpha_notes {gaplength 1d}
+ flags docs
+ }
+
+ } #end alpha_release_notes
+
+
+ # two days to create web banner
+ # one day for websites team to add to www.fedoraproject.org
+ # should be live one day before the release
+ task alpha_banner "Alpha Release Banner" {
+ precedes !alpha_drop {gaplength 3d}
+
+ task alpha_create_banner "Create Alpha Website Banner" {
+ length 2d
+ flags design
+ }
+
+ task alpha_publish_banner "Add Alpha Banner to Website" {
+ length 1d
+ flags web
+ }
+ }
+
+ # This task is required for the Product Pages
+ # taskid and description should not be changed or displayed
+ task public_alpha "Public Alpha" {
+ depends !stage_alpha
+ flags hidden
+ }
+
+ # KEY ADJUSTMENT POINT
+ # Three weeks for Alpha Testing
+ # IF "Beta Deadline" is missed the length of this task is extended--
+ # in that case corresponding change needs to be made to "software_translation" task
+ task test_alpha "Alpha Testing" {
+ depends !stage_alpha
+ length 15d
+ flags quality, proto
+ }
+
+ task review_bookmarks "Review Firefox Bookmarks For Update" {
+ depends !stage_alpha
+ length 5d
+ flags marketing
+ }
+
+ task update_bookmarks "Update and Package Firefox Bookmarks" {
+ depends !review_bookmarks
+ length 2d
+ flags marketing
+ }
+
+ task tag_bookmarks "Tag Updated Bookmarks Package for ${content_title} ${major}" {
+ depends !update_bookmarks
+ flags marketing
+ }
+
+ # Explicit task to mark end of alpha
+ # Also permits subsequent tasks to cleanly depend on it using "precedes" (because it is zero length)
+ task alpha_end "End of Alpha Testing" {
+ depends !test_alpha
+ flags quality
+ }
+
+ task beta_marketing_notes "Marketing: Beta One Page Release Notes" {
+ depends !alpha_end {gaplength 5d}
+ length 5d
+ flags marketing
+ }
+
+ }
+
+ task beta "Beta Release" {
+
+ # KEY ADJUSTMENT POINT--if the Alpha slips, make sure the blocker meeting
+ # tasks continue to line up correctly
+ # Once the Alpha is staged, start holding Blocker meetings for the Beta
+
+ task remind_beta_blocker1 "Reminder: Beta Blocker Meeting (${content}${major}beta) #1" {
+ depends !!alpha.create_alpha_compose {gaplength 9d }
+ flags pm
+ }
+
+ task beta_blocker1 "Beta Blocker Meeting (${content}${major}beta) #1" {
+ depends !!alpha.stage_alpha {gaplength 3d }
+ flags quality, releng, devel, pm, blocker
+ }
+
+ task beta_releng_tickets "File All Release Engineering Tickets for ${content_title} ${major} Beta" {
+ depends !!alpha.stage_alpha {gaplength 2d }
+ flags releng
+ }
+
+ task remind_beta_blocker2 "Reminder: Beta Blocker Meeting (${content}${major}beta) #2" {
+ depends !beta_blocker1 {gaplength 3d}
+ flags pm
+ }
+
+ task beta_blocker2 "Beta Blocker Meeting (${content}${major}beta) #2" {
+ depends !beta_blocker1 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ # raise awareness one week before Beta compose
+ task daily_beta_blocker "Daily Review & Notification of Open Beta Blocker Bugs" {
+ depends !beta_blocker2 {gaplength 1d}
+ length 4d
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task remind_beta_blocker3 "Reminder: Beta Blocker Meeting (${content}${major}beta) #3" {
+ depends !beta_blocker2 {gaplength 3d}
+ flags pm
+ }
+
+ task beta_blocker3 "Beta Blocker Meeting (${content}${major}beta) #3" {
+ depends !beta_blocker2 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task remind_beta_blocker4 "Reminder: Beta Blocker Meeting (${content}${major}beta) #4" {
+ depends !beta_blocker3 {gaplength 3d}
+ flags pm
+ }
+
+ task beta_blocker4 "Beta Blocker Meeting (${content}${major}beta) #4" {
+ depends !beta_blocker3 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ # Create anchor one week before for Beta Deadline
+ task shadow_beta_deadline "SHADOW: one week before Beta Deadeline" {
+ precedes !beta_deadline {gaplength 6d}
+ flags hidden
+ }
+
+ task remind_beta_deadline "Remind Beta Deadline in 1 week" {
+ depends !shadow_beta_deadline
+ flags pm
+ }
+
+ task remind_final_freatures "Remind Features 100% Complete in 1 week" {
+ depends !shadow_beta_deadline
+ flags pm
+ }
+
+ task beta_spins_ks "Build spin-kickstarts package from master" {
+ depends !shadow_beta_deadline
+ flags spins
+ }
+
+ task coordinate_swag_design "Coordinate Media/Swag/Poster artwork with Design team" {
+ depends !shadow_beta_deadline {gaplength 5d}
+ length 10d
+ flags ambassadors
+ }
+
+ # Two weeks before the public Beta Release
+ task beta_deadline "Beta Change Deadline" {
+ depends !!alpha.test_alpha
+ flags releng, docs, quality, pm, proto, devel, key, marketing, spins, roadmap
+ }
+
+ task feature_complete "Features 100% Complete Deadline" {
+ depends !!alpha.test_alpha
+ flags releng, docs, quality, pm, proto, devel, key, marketing, roadmap, fpl
+ }
+
+ # KEY ADJUSTMENT POINT--manually adjust if length of time before Beta ships changes
+ task beta_infrastructure_freeze "Beta Infrastructure Change Freeze" {
+ depends !!alpha.test_alpha
+ length 10d
+ flags infrastructure, releng
+ }
+
+ task announce_beta_deadline "Announce Beta Deadline & Feature Complete" {
+ depends !!alpha.test_alpha
+ flags pm
+ }
+
+ task final_feature_fesco "Deliver features < 100% to FESCo" {
+ depends !beta_deadline {gaplength 1d}
+ flags pm
+ }
+
+ task brief_ambassadors "Brief Ambassadors on upcoming release" {
+ depends !beta_deadline {gaplength 5d}
+ length 5d
+ flags marketing
+ }
+
+ # The Release Slogan is created by the Marketing team based on
+ # the initial artwork theme. The Design Team needs to know
+ # the slogan to create the release banners
+
+ # prepare 6 weeks before GA (2 weeks of work)
+ # go live 1 month before GA
+ # KEY ADJUSTMENT POINT
+ task create_countdown "Create Count Down Graphic" {
+ depends !beta_deadline
+ length 10d
+ flags design
+ }
+
+ task publish_countdown "Publish Count Down Graphic" {
+ depends !create_countdown
+ length 1d
+ flags web
+ }
+
+ task beta_release_notes "Beta Release Notes" {
+
+ task unclaimed_beats "Write Unclaimed Wiki Beats" {
+ depends !!!alpha.alpha_drop
+ length 6d
+ flags docs
+ }
+
+ task port_wiki_publican "Port Wiki to Publican" {
+ depends !unclaimed_beats {gaplength 1d}
+ length 3d
+ flags docs
+ }
+
+ task remind_trans_beta_notes "Remind Translation: Beta Rel Notes POT Coming" {
+ depends !unclaimed_beats
+ flags docs
+ }
+
+ task start_release_notes_pot1 "Start nightly POT files all fed-rel-notes.rpm content" {
+ depends !unclaimed_beats {gaplength 1d}
+ flags docs
+ }
+
+ task release_notes_pot1 "Generate nightly POT files all fed-rel-notes.rpm content" {
+ depends !unclaimed_beats {gaplength 1d}
+ length 13d
+ flags docs
+ }
+
+ task remind_devel_beta_notes"Remind announce-list & f-devel-announce: Wiki Freeze" {
+ depends !unclaimed_beats {gaplength 1d}
+ flags docs
+ }
+
+ task beta_wiki_freeze "Wiki Freeze: Beta Release Notes" {
+ depends !remind_devel_beta_notes {gaplength 2d}
+ flags docs
+ }
+
+ task trans_release_notes "Translate Beta Release Notes" {
+ depends !port_wiki_publican {gaplength 1d}
+ length 14d
+ flags translation
+ }
+
+ # KEY ADJUSTMENT POINT
+ task build_trans_review "Ongoing build translation review htmls" {
+ depends !beta_wiki_freeze
+ length 5d
+ flags docs
+ }
+
+ # KEY ADJUSTMENT POINT
+ task trans_review_beta "Review and correct Beta Release Notes (daily buids html)" {
+ depends !beta_wiki_freeze
+ length 5d
+ flags translation
+ }
+
+ task trans_release_notes_deadline "Translation Deadline: Beta Release Notes (PO Files complete)" {
+ depends !trans_review_beta
+ flags translation, docs
+ }
+
+ task build_beta_relnotes "Build f-r-n.rpm and Push to updates-candidate" {
+ depends !trans_release_notes_deadline
+ length 2d
+ flags docs, translation
+ }
+
+ task final_release_notes_reminder "Reminder: Send Project Wide-Final Release Notes Deadlines" {
+ depends !!beta_deadline {gaplength 7d}
+ flags docs
+ }
+
+ # one day before release which is 2D after meeting
+ task web_notes "Build and Post Beta release-notes to docs.fedoraproject.org" {
+ depends !!beta_meeting {gaplength 2d}
+ flags docs
+ }
+
+ # one day before release which is 2D after meeting
+ task tech_web_notes "Build and Post Fedora Technical Notes to docs.fedoraproject.org" {
+ depends !!beta_meeting {gaplength 2d}
+ flags docs
+ }
+
+ } # end beta_release_notes
+
+
+ task splash_deadline "Deadline: Beta Splash Screens" {
+ depends !!alpha.finalize_splash_screens
+ flags design
+ }
+
+ task package_final_splash "Package: Beta Splash Screens" {
+ depends !!alpha.finalize_splash_screens
+ length 2d
+ flags design
+ }
+
+ task package_beta_wallpaper "Package: Beta Wallpaper"{
+ depends !!alpha.beta_wallpaper
+ length 2d
+ flags design
+ }
+
+ task package_supplemental_wallpaper "Package: Supplemental Wallpaper"{
+ depends !!alpha.beta_wallpaper
+ flags design
+ }
+
+ task beta_meeting_announce "Announce: Beta Release Readiness Meeting" {
+
+ flags pm
+ }
+
+ # KEY ADJUSTMENT POINT if Beta Deadline changes
+ task beta_meeting_reminder "Reminder: Beta Release Readiness Meeting" {
+ depends !beta_deadline {gaplength 4d}
+ flags pm
+ }
+
+ task beta_meeting "${content_title} ${major} Beta Release Readiness Meeting" {
+ depends !beta_meeting_reminder {gaplength 3d}
+ flags releng, pm, quality, docs, design, translation, marketing, web
+ }
+
+ task beta_announce "Create Beta Announcement (Docs & Marketing)" {
+ depends !beta_meeting
+ length 2d
+ flags docs, marketing
+ }
+
+ # placeholder if slip
+ # task beta_blocker4 "Beta Blocker Day (${content}${major}beta) #4" {
+ # depends !!beta_blocker3 {gaplength 5d}
+ # flags releng, quality, devel, pm, blocker
+ # }
+
+
+ task shadow_before_beta_compose "SHADOW: 1.5 weeks before Beta Compose" {
+ precedes !create_beta_compose {gaplength 9d} # with 'precedes', gaplength pushes date backwards
+ flags hidden
+ }
+
+ task beta_installer_build1 "Submit Installer Build for Beta TC Compose" {
+ depends !shadow_before_beta_compose
+ flags devel
+ }
+
+ task create_beta_tc "Create Beta Test Compose (TC)" {
+ depends !shadow_before_beta_compose {gaplength 2d}
+ flags releng, proto
+ }
+
+ task test_beta_tc "Test Beta 'Test Compose'" {
+ depends !create_beta_tc
+ length 6d
+ flags quality, proto
+ }
+
+ task beta_rawhide_install "Pre-Beta Acceptance Test Plan" {
+ precedes !create_beta_tc
+ length 5d
+ flags quality
+ }
+
+ task remind_beta_go_not "Reminder: ${content_title} ${major} Beta Go/No-Go Meeting" {
+ depends !create_beta_compose {gaplength 2d}
+ flags pm
+ }
+
+ task beta_go_not "${content_title} ${major} Beta Go/No-Go Meeting (17:00 US Eastern)" {
+ depends !create_beta_compose {gaplength 4d}
+ flags releng, quality, devel, pm, proto, blocker
+ }
+
+ task beta_kernel_build "Submit Kernel Build for Beta RC Compose" {
+ depends !beta_deadline
+ flags devel
+ }
+
+ task beta_installer_build "Submit Installer Build for Beta RC Compose" {
+ depends !beta_deadline {gaplength 1d}
+ flags devel
+ }
+
+ # KEY ADJUSTMENT POINT if Beta release date slips--add more time to this task
+ task create_beta_compose "Compose Beta Candidate" {
+ depends !beta_deadline {gaplength 2d}
+ flags releng, proto
+ }
+
+ task call_for_events "Call from FAmSCo and Regional Teams for Release Events" {
+ depends !beta_deadline {gaplength 2d}
+ flags ambassadors
+ }
+
+ task logistics_budget "Plan Regional Logistics for Release Events & File Budget Requests" {
+ depends !call_for_events
+ length 10d
+ flags ambassadors
+ }
+
+ task test_beta2 "Test Beta Candidate" {
+ depends !create_beta_compose
+ length 5d
+ flags quality, proto
+ }
+
+ task start_stage_beta "Start Stage & Sync Beta to Mirrors" {
+ depends !test_beta2
+ flags releng
+ }
+
+ task notify_mirrors_beta "Notify Mirrors of ${content_title} ${major} Beta" {
+ depends !start_stage_beta {gaplength 1d}
+ flags releng
+ }
+
+ task stage_beta "Stage & Sync Beta to Mirrors" {
+ depends !test_beta2
+ length 3d
+ flags releng, proto
+ }
+
+ task beta_export_control "Beta Export Control Reporting" {
+ depends !start_stage_beta {gaplength 1d}
+ flags releng, pm
+ }
+
+
+ # two days to create web banner
+ # one day for websites team to add to www.fedoraproject.org
+ # should be live one day before the release
+ task beta_banner "Beta Release Banner" {
+ precedes !beta_drop {gaplength 3d}
+
+ task beta_create_banner "Create Beta Website Banner" {
+ length 2d
+ flags design
+ }
+
+ task beta_publish_banner "Add Beta Banner to Website" {
+ length 1d
+ flags web
+ }
+ }
+
+ task shadow_before_beta_drop "SHADOW: One Day before Public Beta release" {
+ precedes !beta_drop {gaplength 2d}
+ flags hidden
+ }
+
+ # Five weeks prior to GA
+ task beta_drop "Beta Release Public Availability" {
+ depends !stage_beta
+ flags docs, releng, quality, pm, translation, proto, design, devel, key, marketing, roadmap, blocker, spins, infrastructure, fpl
+ }
+
+ task event_deadline "Release Event Submission Deadline" {
+ depends !beta_drop {gaplength 3d}
+ flags ambassadors
+ }
+
+ task budget_allocations "FAmSCo Review Budget Allocations" {
+ depends !beta_drop {gaplength 3d}
+ flags ambassadors
+ }
+
+ task irc_sessions "Regional IRC sessions" {
+ depends !beta_drop {gaplength 8d}
+ length 10d
+ flags ambassadors
+ }
+
+ # Three weeks of public testing
+ # Ends on a Monday and is followed by Final Release Deadline
+ task beta_test "Beta Testing" {
+ depends !stage_beta
+ length 14d
+ flags quality, proto
+ }
+
+ task websites_trans_reminder "Reminder to f-websites-list about POT/PO dates in 7 days" {
+ depends !beta_drop
+ flags translation, web
+ }
+
+ # two weeks to create
+ # should be completely done and ready for hand off to Ambassadors two weeks before GA
+ # Ambassadors should have made prior arrangements to flip artwork over to media producer
+ # at this time.
+ task media "Create DVD/CD label and sleeve artwork" {
+ # not a "great" place to anchor to as it could move
+ # needs to start four weeks before GA
+ depends !beta_drop
+ length 10d
+ flags design
+ }
+
+ task rc_rawhide_install "Pre-RC Acceptance Test Plan" {
+ depends !stage_beta {gaplength 7d}
+ length 4d
+ flags quality
+ }
+
+ task testmile "End of Beta Testing" {
+ depends !beta_test
+ flags quality
+ }
+
+ }
+ } # E N D of TestingPhase
+
+ task LaunchPhase "Launch Phase" {
+
+ # four weeks before GA, ambassadors create release posters
+ # two weeks before GA to art team does final polish to posters
+ # posters are ready on release day
+ task release_posters "Release Party Posters" {
+ depends !!TestingPhase.beta.beta_drop
+ task create_posters "Create Release Party Posters" {
+ length 10d
+ flags ambassadors
+ }
+
+ task polish_poster "Polish/Finalize Release Party Posters" {
+ depends !create_posters
+ length 9d
+ flags design
+ }
+ }
+
+ task screenshots "Update and freeze the screenshots page" {
+ depends !!TestingPhase.beta.stage_beta {gaplength 5d}
+ length 5d
+ flags marketing
+ }
+
+ task final_screenshots "Marketing: Final Screen Shots" {
+ depends !screenshots
+ length 5d
+ flags marketing
+ }
+
+ task final_marketing_notes "Marketing: Final One Page Release Notes" {
+ depends !screenshots
+ length 5d
+ flags marketing
+ }
+
+ task briefings "Brief news distribution network" {
+ depends !screenshots
+ length 5d
+ flags marketing
+ }
+
+ task monitor "Monitor news sites to provide corrections & info" {
+ depends !screenshots
+ length 29d
+ flags marketing
+ }
+
+ task rc "Release Candidate" {
+
+ task final_releng_tickets "File All Release Engineering Tickets for ${content_title} ${major} GA" {
+ depends !!!TestingPhase.beta.stage_beta {gaplength 2d }
+ flags releng
+ }
+
+ task remind_ga_blocker1 "Reminder: Final Blocker Meeting (${content}${major}blocker) #1" {
+ depends !!!TestingPhase.beta.create_beta_compose {gaplength 4d}
+ flags pm
+ }
+
+ task ga_blocker1 "Final Blocker Meeting (${content}${major}blocker) #1" {
+ depends !!!TestingPhase.beta.start_stage_beta {gaplength 1d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task remind_ga_blocker2 "Reminder: Final Blocker Meeting (${content}${major}blocker) #2" {
+ depends !ga_blocker1 {gaplength 3d}
+ flags pm
+ }
+
+ task ga_blocker2 "Final Blocker Meeting (${content}${major}blocker) #2" {
+ depends !ga_blocker1 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task remind_ga_blocker3 "Reminder: Final Blocker Meeting (${content}${major}blocker) #3" {
+ depends !ga_blocker2 {gaplength 3d}
+ flags pm
+ }
+
+ task ga_blocker3 "Final Blocker Meeting (${content}${major}blocker) #3" {
+ depends !ga_blocker2 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ # two days before Final Deadline
+ task shadow_before_final_deadline "SHADOW: one day before Final Deadline" {
+ precedes !final_change_deadline {gaplength 2d}
+ flags hidden
+ }
+
+ task kernel_debug "Disable Kernel debug and submit new Kernel build for RC" {
+ depends !shadow_before_final_deadline
+ flags devel
+ }
+
+ task final_change_deadline "Final Change Deadline" {
+ depends !!!TestingPhase.beta.beta_test
+ flags releng, devel, proto, pm, key, spins
+ }
+
+ task check_swag "FAmSCo and Regional Teams Meet to Address Unresolved Events/Media/Swag Issues" {
+ depends !final_change_deadline {gaplength 1d}
+ flags ambassadors
+ }
+
+ # one day before Final Deadline
+ task final_wallpaper "Package Final Wallpaper" {
+ depends !shadow_before_final_deadline
+ flags design
+ }
+
+ # one day before Final Deadline
+ task final_splash "Package Final Splash Screens" {
+ depends !shadow_before_final_deadline
+ flags design
+ }
+
+ task announce_final_change_deadline "Announce Final Freeze & Implications" {
+ depends !final_change_deadline
+ flags pm
+ }
+
+ # ADJUST FOR NEW RELEASE--EOL Version
+ task eol_warning "File RHT Eng-ops ticket for Fedora 13 EOL Bugzilla warning" {
+ depends !final_change_deadline
+ flags pm
+ }
+
+ # KEY ADJUSTMENT POINT--manually adjust if length of time before Final release ships changes
+ task final_infrastructure_freeze "Final Infrastructure Change Freeze" {
+ depends !!!TestingPhase.beta.beta_test {gaplength 1d}
+ length 10d
+ flags infrastructure, releng
+ }
+
+ task remind_ga_blocker4 "Reminder: Final Blocker Meeting (${content}${major}blocker) #4" {
+ depends !ga_blocker3 {gaplength 3d}
+ flags pm
+ }
+
+ task ga_blocker4 "Final Blocker Meeting (${content}${major}blocker) #4" {
+ depends !ga_blocker3 {gaplength 5d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ # raise awareness one week before final compose
+ task daily_ga_blocker "Daily Review & Notification of Open Final Blocker Bugs" {
+ depends !ga_blocker3 {gaplength 1d}
+ length 4d
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task ga_blocker5 "Final Blocker Meeting (${content}${major}blocker)--Blocks RC Compose" {
+ depends !ga_blocker4 {gaplength 1d}
+ flags releng, quality, devel, pm, blocker
+ }
+
+ task ga_release_notes "Final Release Notes" {
+
+ # One day before public beta release
+ task final_release_note_wiki_reminder "Reminder to Development: Wiki Freeze in 7 days" {
+ depends !!!!TestingPhase.beta.shadow_before_beta_drop
+ flags docs
+ }
+
+ task prep_ga_notes "Prepare GA Release Notes" {
+ depends !!!!TestingPhase.beta.beta_drop
+ flags docs, quality
+ }
+
+ task ga_release_notes_freeze "String Freeze: GA Release Notes" {
+ depends !prep_ga_notes {gaplength 4d}
+ flags docs
+ }
+
+ task wiki_ga_port "Port diff wiki content to Publican" {
+ depends !ga_release_notes_freeze
+ length 5d
+ flags docs
+ }
+
+ task remind_trans_ga_notes "Remind Translation: RPM Freeze (no more POTs) in 5 days" {
+ depends !ga_release_notes_freeze {gaplength 2d}
+ flags docs
+ }
+
+ # KEY ADJUSTMENT POINT--if length of Beta changes this task length needs to change too
+ task ga_pot_trans "Translate Final Release Notes (POT to PO)" {
+ depends !!!!TestingPhase.beta.beta_release_notes.trans_release_notes_deadline {gaplength 1d}
+ length 24d
+ flags translation
+ }
+
+ task ga_release_notes_pot "Generate GA Release Notes POT files for Translation" {
+ depends !wiki_ga_port
+ flags docs
+ }
+
+ task build_trans_review_final "Build GA release note htmls for Translation" {
+ depends !ga_release_notes_pot {gaplength 1d}
+ length 4d
+ flags docs
+ }
+
+ task build_ga_trans_review "Review and correct GA Release Notes (daily builds html)" {
+ depends !ga_release_notes_pot {gaplength 1d}
+ length 4d
+ flags docs, translation
+ }
+
+ task remind_ga_trans_deadline "Remind Translators of GA Release Notes Deadline in 4 days" {
+ depends !ga_release_notes_pot {gaplength 3d}
+ flags docs
+ }
+
+ task ga_release_notes_po "Translation Deadline: GA rel-notes (PO Files complete)" {
+ depends !ga_pot_trans
+ flags translation
+ }
+
+ task ga_release_notes_rpm "Build fedora-release-notes.rpm" {
+ depends !ga_release_notes_po
+ length 2d
+ flags docs
+ }
+
+ } #end final release notes
+
+
+ # Three banners are created for the GA release (based on the Slogan from Marketing)
+ # 1) large banner--fedoraproject.org front page
+ # 2) "the release is out, go get it"--fedoraproject.org front page
+ # 3) release name on start.fedoraproject.org
+ # banners take one week to complete
+ # banners should be completed one week before GA
+ # banners are translated the week up until GA
+ # translated during the week up until GA
+ task ga_create_banners "Create Final Release Banners" {
+ depends !!!TestingPhase.beta.testmile
+ length 9d
+ flags design
+ }
+
+ # Start one day before Final Change Deadline
+ task create_ga_announce "Create GA Announcement (Docs & Marketing)" {
+ depends !!!LaunchPhase.rc.shadow_before_final_deadline
+ length 7d
+ flags docs, marketing
+ }
+
+ task translate_ga_announce "GA Announcement available for translation (optional)" {
+ depends !create_ga_announce
+ length 5d
+ flags translation
+ }
+
+ task ga_publish_banners "Add Final Release Banners to Website" {
+ depends !ga_create_banners
+ length 1d
+ flags web
+ }
+
+ # web propertities need to be updated and translated
+ # Tasks start at time Beta Release goes out
+ # http://fedoraproject.org/en/index
+ # http://fedoraproject.org/en/get-fedora
+ # http://fedoraproject.org/en/join-fedora
+ # http://fedoraproject.org/en/get-help
+ task web_content_update "Update Website Content" {
+ depends !!!TestingPhase.beta.beta_drop
+ length 5d
+ flags web
+ }
+
+ task web_freeze "Website String Freeze" {
+ depends !web_content_update
+ flags web
+ }
+
+ task web_create_pot "Create Website POT Files" {
+ depends !web_freeze
+ length 1d
+ flags web
+ }
+
+ task trans_web "Translation Period for Website (POT to PO)" {
+ depends !web_create_pot
+ length 9d
+ flags translation
+ }
+
+ task review_trans_web "Review and correct Website translations" {
+ depends !trans_web
+ length 4d
+ flags translation, web
+ }
+
+ task finish_trans_web "Translation Deadline: Websites (POs done)" {
+ depends !review_trans_web
+ flags translation
+ }
+
+ task publish_trans_web "Publish Translations on Website (fedoraproject.org)" {
+ depends !review_trans_web
+ length 1d
+ flags web
+ }
+
+ task final_meeting_reminder "Reminder: Final Release Readiness Meeting" {
+ depends !!!TestingPhase.beta.beta_test {gaplength 5d}
+ flags pm
+ }
+
+ task ga_meeting "${content_title} ${major} Final Release Readiness Meeting" {
+ depends !final_meeting_reminder {gaplength 3d}
+ flags releng, pm, quality, docs, design, marketing, translation, web
+ }
+
+ task shadow_before_final_compose "SHADOW: one week before RC Compose" {
+ precedes !start_final_compose {gaplength 8d}
+ flags hidden
+ }
+
+ task final_installer_build1 "Submit Installer Build for Final TC Compose" {
+ depends !shadow_before_final_compose
+ flags devel
+ }
+
+ task create_final_tc "Create 'Final' Test Compose (TC)" {
+ depends !shadow_before_final_compose {gaplength 2d}
+ flags releng, proto
+ }
+
+ task test_final_tc "Test 'Final' Test Compose (TC)" {
+ depends !create_final_tc
+ length 4d
+ flags quality, proto
+ }
+
+ task final_installer_build "Submit Installer Build for Final RC Compose" {
+ depends !final_change_deadline
+ flags devel
+ }
+
+ task start_final_compose "Compose 'Final' RC: DVD, Live, Spins" {
+ depends !final_change_deadline {gaplength 1d}
+ length 1d
+ flags releng, key, roadmap, proto
+ }
+
+ task early_iso "Obtain Final Release ISOs from Release Engineering for duplication" {
+ depends !test_final {gaplength 2d}
+ length 3d
+ flags ambassadors
+ }
+
+ task regional_marketing "Regional Coordination with Marketing for Release Events" {
+ depends !test_final {gaplength 2d}
+ length 5d
+ flags ambassadors
+ }
+
+ task deliver_final "Deliver RC to QA for Testing" {
+ depends !start_final_compose
+ flags releng, proto
+ }
+
+ task test_final "Test 'Final' RC" {
+ depends !deliver_final
+ length 4d
+ flags quality
+ }
+
+ # for ics file
+ task start_stage_final "Start Stage & Sync RC to Mirrors" {
+ depends !test_final {gaplength 2d}
+ flags releng
+ }
+
+ task notify_mirrors_final "Notify Mirrors of ${content_title} ${major} Final" {
+ depends !start_stage_final {gaplength 1d}
+ flags releng
+ }
+
+
+ task stage_final "Stage & Sync RC to Mirrors" {
+ depends !test_final {gaplength 2d}
+ length 3d
+ flags releng, proto
+ }
+
+ task package_spins_ks "Branch spin-kickstarts and build package from new branch" {
+ depends !create_final_tc
+ flags spins
+ }
+
+ task freeze_spins_ks "Spins kickstart package Freeze" {
+ depends !create_final_tc
+ flags spins
+ }
+
+ task enable_updates "Enable ${content_title} ${major} Updates" {
+ depends !!!TestingPhase.beta.beta_test {gaplength 2d}
+ flags releng
+ }
+
+ task remind_final_go_not "Reminder: ${content_title} ${major} Final Go/No-Go Meeting" {
+ depends !start_final_compose {gaplength 1d}
+ flags pm
+ }
+
+ # Hold on Tuesday instead of Wednesday (Alpha and Beta)--this provides a little cushion
+ # if something goes wrong. Mirrors do not have to start sync until Thursday
+ task final_go_not "${content_title} ${major} Final Go/No-Go Meeting (17:00 US Eeastern)" {
+ depends !start_final_compose {gaplength 4d}
+ flags releng, quality, docs, pm, proto, blocker
+ }
+
+ task final_export_control "Final Export Control Reporting" {
+ depends !start_stage_final {gaplength 1d}
+ flags releng, pm
+ }
+
+ # Zero-day tasks should start two Fridays before GA and finish the day before GA
+ task zero_day_relnotes "Zero Day Release Notes" {
+
+ task shadow_zero_day "SHADOW: Seven work week days before GA" {
+ precedes !!!ga {gaplength 7d}
+ flags hidden
+ }
+
+ task zero_day_web "0-Day rel-notes update docs.fp.org" {
+ depends !shadow_zero_day
+ length 6d
+ flags docs
+ }
+
+ task zero_day_rpm "0-Day rel-notes build updated rpm" {
+ depends !shadow_zero_day
+ length 6d
+ flags docs
+ }
+
+ task zero_day_pot "0-Day rel-notes generate POT" {
+ depends !shadow_zero_day
+ length 6d
+ flags docs
+ }
+
+ task zero_day_trans "Translate 0-Day Release Notes" {
+ depends !shadow_zero_day
+ length 6d
+ flags translation
+ }
+
+ task zero_day_deadline "Translation Deadline: 0-Day (PO Files complete)" {
+ depends !zero_day_trans
+ flags translation
+ }
+
+ task web_post "Add translated zero-day updates to docs.fp.org" {
+ depends !zero_day_trans
+ flags docs
+ }
+
+ task post_tech_notes "Update and post Fedora Technical Notes to docs.fedoraproject.org" {
+ depends !!!ga
+ flags docs
+ }
+
+ # Monday after Tuesday GA
+ task push_updates_rpm "Push updated rel-notes RPMs to Updates repo" {
+ depends !!!ga {gaplength 4d}
+ flags docs
+ }
+
+ } # zero_day_relnotes
+
+ } # end of rc task
+
+ # Required for product pages--do not change description
+ # Also make sure to confirm this date with Red Hat IS to
+ # make sure it does not conflict with other releases. This should
+ # generally not be a problem because of:
+ # https://fedoraproject.org/wiki/Infrastructure/Red_Hat_bandwidth_effects
+ # Do NOT change the name of this task
+ task ga "GA Release" {
+ depends !rc.stage_final
+ flags hidden, roadmap
+ }
+
+ task bugzilla_descrption "Reflect supported versions in Bugzilla product description" {
+ depends !rc.stage_final
+ flags pm
+ }
+
+ task final "Final (GA) Release" {
+ depends !rc.stage_final
+ flags quality, releng, docs, design, pm, translation, proto, devel, key, marketing, roadmap, spins, infrastructure, fpl
+ }
+
+ # ADJUST FOR NEW RELEASE--EOL Version
+ task remind_eol "Send Email Reminder About Fedora 13 EOL Activities" {
+ depends !ga {gaplength 2d}
+ flags releng, pm, devel
+ }
+
+ task event_reports "Hold Release Events and Publish Event Reports" {
+ depends !ga
+ length 23d
+ flags ambassadors
+ }
+
+ task spins_ga_ks "Build new spin-kickstarts package for updates (if necessary)" {
+ depends !rc.stage_final
+ flags spins
+ }
+
+ task marketing_post "Marketing Retrospective" {
+ depends !final
+ length 10d
+ flags marketing
+ }
+ }
+
+ /*
+ # ADJUST FOR NEW RELEASE
+
+ # manually set end date of maintenance based on...
+ task MaintenancePhase "Maintenance Phase" {
+
+ }
+ */
+
+ # Starting in Fedora 13, the docs group wanted the Guides work to span almost
+ # the entire release cycle--they don't fit nicely into different phases.
+ # So I'm putting them all here in their own block.
+
+ # Run from Start until one week before GA
+ task all_guides "${content_title} ${major} Guides" {
+
+ # Run from Start until "Branch Guides"
+ task continue_guides_trans "Continue translation of guides in branch of previous release " {
+ length 70d
+ flags translation
+ }
+
+
+ task test_branch_guides "Test master branches of guides against Alpha and correct" {
+ depends !!TestingPhase.alpha.stage_alpha
+ length 10d
+ flags docs
+ }
+
+ task branch_guides "Branch Guides" {
+ depends !test_branch_guides
+ flags docs
+ }
+
+ task guides_pot "Create POT files for All Guides" {
+ depends !branch_guides
+ flags docs
+ }
+
+ task notify_trans "Notify trans that new Guide POT files available " {
+ depends !guides_pot
+ flags docs
+ }
+
+ task trans_all_guides "Translate All Guides (POT to PO)" {
+ depends !guides_pot
+ flags docs
+ }
+
+ task publish_draft "Publish draft guides" {
+ depends !branch_guides
+ flags docs
+ }
+
+ task annouce_publish_draft "Notify announce-list and f-devel-list draft guides available" {
+ depends !publish_draft
+ flags docs
+ }
+
+
+ # ADJUST FOR NEW RELEASE--make sure this task lands one day before GA
+ task guides_trans "Translate All Guides (POT to PO)" {
+ depends !guides_pot
+ length 39d
+ flags translation
+ }
+
+ task remind_trans_pot "Reminder to Trans that new POT files are coming for all guides" {
+ depends !!TestingPhase.alpha.stage_alpha {gaplength 8d}
+ flags docs
+ }
+
+ # Wednesday, one week after Beta Change Deadline
+ task srpm_review "Remind new guide owners SRPM package review" {
+ depends !!TestingPhase.beta.beta_deadline {gaplength 6d}
+ flags docs
+ }
+
+ task shadow_before_beta_deadline "SHADOW: for Friday before Beta deadline" {
+ precedes !!TestingPhase.beta.beta_deadline {gaplength 1d}
+ flags hidden
+ }
+
+ # Friday before Final Change Deadline
+ task remind_trans "Reminder to Trans that Final Guides POT files are coming" {
+ depends !shadow_before_beta_deadline
+ flags docs
+ }
+
+ task guides_string_freeze "String Freeze All Guides" {
+ depends !!LaunchPhase.rc.final_change_deadline
+ flags docs
+ }
+
+ task generate_final_pot "Generate final POT files for Guides" {
+ depends !guides_string_freeze
+ flags docs
+ }
+
+ task notify_trans_final "Notify Trans of Final Guides POT availability" {
+ depends !guides_string_freeze
+ flags docs
+ }
+
+ # Monday to Friday, two weeks before GA
+ task build_daily "Daily builds of Final guides for Translation" {
+ length 9d
+ depends !!LaunchPhase.rc.final_change_deadline
+ flags docs
+ }
+
+ # Monday to Friday, two weeks before GA
+ task review_daily "Review and correct Final Translated Guides (daily builds html)" {
+ depends !!LaunchPhase.rc.final_change_deadline
+ length 9d
+ flags translation
+ }
+
+ # Friday before GA
+ task shadow_guides_trans_deadline "SHADOW: Translation Deadline: All Final Guides" {
+ precedes !!LaunchPhase.ga {gaplength 2d}
+ flags hidden
+ }
+
+ # zero duration tasks (milestones/deadlines) need a shadow preceds task so they report correctly
+ # Also needed for ICS files which only report milestones
+ task guides_trans_deadline "Translation Deadline: All Final Guides" {
+ depends !shadow_guides_trans_deadline
+ flags translation
+ }
+
+ task test_guides_beta "Test guides against Beta and correct" {
+ depends !!TestingPhase.beta.beta_drop
+ length 4d
+ flags docs
+ }
+
+ task refresh_pot "Refresh POT files for all guides against Beta" {
+ depends !test_guides_beta
+ flags docs
+ }
+
+ task notify_trans_refresh "Notify trans that POT files updated against Beta" {
+ depends !refresh_pot
+ flags docs
+ }
+
+ task republish_draft "Republish draft guides for Beta" {
+ depends !test_guides_beta
+ flags docs
+ }
+
+ task notify_revised_draft "Notify announce-list and f-devel-list revised draft guides available" {
+ depends !republish_draft
+ flags docs
+ }
+
+ # Friday before GA until the day before GA
+ task guides_final_build "Final Build All Guides: All Languages" {
+ depends !srpm_review
+ length 3d
+ flags docs
+ }
+
+ # Day before GA
+ task shadow_publish_guides "SHADOW: Publish all guides to docs.fp.o (html,html-single,pdf)" {
+ precedes !!LaunchPhase.ga {gaplength 2d}
+ flags hidden
+ }
+
+ task publish_guides "Publish all guides to docs.fp.o (html,html-single,pdf)" {
+ depends !shadow_publish_guides
+
+ flags docs
+ }
+
+ } # end of "all_guides"
+
+
+ # Elections http://fedoraproject.org/wiki/Elections
+ # Board & FESCo are reelected in every release
+ # FAmSCo Elections are held once a year near the Halloween release
+
+ # ADJUST FOR NEW RELEASE
+ task elections "${content_title} ${next_major} Election Coordination" {
+
+ # manually set start date that is five weeks before GA date (on a Tuesday)
+ # this is cleaner than using 'precedes'
+ # use 'duration' to make it easier for some tasks to land on weekends
+ start 2011-04-05
+ flags elections, fpl, pm
+
+ # Don't forget to do this! Or else bad things happen.
+ task remind "Remind advisory-board list of upcoming election schedule" {
+ }
+
+ task solicit "Solicit volunteers for questionnaire and town halls" {
+ depends !remind
+ duration 7d
+ }
+
+ task wiki_update "Update wiki page https://fedoraproject.org/wiki/Elections with required information" {
+ depends !solicit
+ }
+
+ task advertise_elections "Advertise elections schedule and pages" {
+ depends !solicit
+ }
+
+ task announce_nominations "FPL/designee announces opening of nominations" {
+ depends !solicit {gapduration 25d}
+ }
+
+ task open_questions "Questionnaire wrangler announces opening for questions"{
+ depends !announce_nominations
+ }
+
+ task collect_questions "Collect question on the wiki"{
+ depends !announce_nominations
+ duration 8d
+ }
+
+ task collect_answers "Candidates write questionnaire answers" {
+ depends !collect_questions
+ duration 7d
+ }
+
+ task announce_town "Town hall wrangler announces schedule for town hall meetings" {
+ depends !announce_nominations
+ }
+
+ task question_deadline "Questionnaire answers due from candidates" {
+ depends !collect_answers
+ }
+
+ # five days before GA
+ task present_answers "Wrangler presents questionnaire answers" {
+ depends !collect_answers {gapduration 1d}
+ duration 2d
+ }
+
+ task post_questions "All answers posted to questionnaire page, advertise to voters" {
+ depends !present_answers
+ }
+
+ task town_hall "Town hall period" {
+ depends !post_questions {gapduration 1d}
+ duration 6d
+ }
+
+ # FIXME: think about adding infrastructure team here
+ task voting_application "Finalize Voting Application" {
+ duration 1d
+ depends !town_hall
+ }
+
+ task voting_start "Voting Begins" {
+ depends !voting_application
+ }
+
+ task voting "Voting for general elections" {
+ depends !voting_application
+ duration 6d
+ }
+
+ task voting_end "Voting Ends" {
+ depends !voting
+ }
+
+ task announce_results "Announce Results" {
+ depends !voting_end {gapduration 1d}
+ }
+
+ } # end elections
+
+ # The release naming process for the next release should end three weeks prior
+ # to the end of the current release
+ # It is easiest to start this task by hardcoding the start date to be 6 weeks before GA
+ # 2010-09-14
+ # 1 week -- collect names
+ # 1 week --fedora board reviews names
+ # 2 weeks -- names reviewed by RHT legal
+ # 1 week -- community vote on names
+
+ # FIXME: is this start date right?
+ # ADJUST FOR NEW RELEASE
+ task naming "Name the ${content_title} ${next_major} Release" {
+ start 2011-03-01 # manually set this date
+ flags pm, fpl
+
+ task gather "Collect ${content_title} ${next_major} Names on Wiki" {
+ length 5.5d
+ }
+
+ task board "Board Review of Proposed ${content_title} ${next_major} Names" {
+ depends !gather
+ length 3d
+ }
+
+ task legal "Legal Review" {
+ depends !board
+ length 5d
+ }
+
+ task vote "Voting" {
+ depends !legal
+ length 4d
+ }
+
+ task announce_name "${content_title} ${next_major} Release Name Announced" {
+ depends !vote {gapduration 1d}
+ flags design, pm
+ }
+ } # end release naming
+
+
+ task pr "Public Relations" {
+
+ task video "Creative team videos" {
+ flags fpl, pr
+
+ task video_schedule "Meet w/Creative to schedule videos" {
+ precedes !video1.review_spotlight1_video {gaplength 25d}
+ length 5d
+ }
+
+ task video1 "Make spotlight video #1" {
+ task review_spotlight1_video "Review video #1" {
+ precedes !release_spotlight1_video
+ length 15d
+ }
+
+ task release_spotlight1_video "Publish spotlight video #1" {
+ depends !!!spotlight_feature_blogs.spotlight_feature1.spotlight_feature1_drop
+ }
+ }
+
+ task video2 "Make spotlight video #2" {
+ task review_spotlight2_video "Review video #2" {
+ precedes !release_spotlight2_video
+ length 15d
+ }
+
+ task release_spotlight2_video "Publish spotlight video #2" {
+ depends !!!spotlight_feature_blogs.spotlight_feature3.spotlight_feature3_drop
+ }
+ }
+
+ task release_video "Make release video" {
+ task review_release_video "Review release video" {
+ precedes !release_video
+ length 20d
+ }
+
+ task release_video "Publish release video" {
+ depends !!!!LaunchPhase.final
+ }
+ }
+
+ } #end video
+
+ task beta_release_blog "Beta press blog entry" {
+ flags fpl, pr
+ /**
+ * By building the final task to be a 0-duration event
+ * (milestone), depending on another given task date like a
+ * release date, and having each other task below precede the
+ * one following, these tasks should auto-adjust to fall on a
+ * given date.
+ */
+
+
+ task beta_release_blog_draft "Start drafting Beta blog" {
+ precedes !beta_release_blog_legal
+ length 10d
+ }
+
+ task beta_release_blog_legal "Red Hat PR send Beta blog to Legal" {
+ precedes !beta_release_blog_intl
+ length 5d
+ }
+
+ task beta_release_blog_intl "Red Hat PR send Beta blog to intl-pr list" {
+ precedes !beta_release_blog_drop
+ length 6d
+ }
+
+ task beta_release_blog_drop "Red Hat PR publish and send Beta blog to media contacts" {
+ depends !!!TestingPhase.beta.beta_drop
+ }
+ }
+
+ task spotlight_feature_blogs "Spotlight feature press blogs" {
+ task spotlight_feature1 "Spotlight feature #1" {
+ task spotlight_feature1_draft "Draft spotlight #1 blog entry" {
+ precedes !spotlight_feature1_legal
+ length 5d
+ flags fpl, pr
+ }
+
+ task spotlight_feature1_legal "Red Hat PR send spotlight #1 blog entry draft to legal" {
+ precedes !spotlight_feature1_drop
+ length 5d
+ flags fpl, pr
+ }
+
+ task shadow_spotlight_feature1 "SHADOW: Three weeks until GA" {
+ precedes !!!!LaunchPhase.final { gaplength 16d }
+ length 1d
+ flags hidden
+ }
+
+ task spotlight_feature1_drop "Red Hat PR publish spotlight #1 blog entry" {
+ depends !shadow_spotlight_feature1
+ flags fpl, pr
+ }
+
+ }
+
+ task spotlight_feature2 "Spotlight feature #2" {
+ task spotlight_feature2_draft "Draft spotlight #2 blog entry" {
+ precedes !spotlight_feature2_legal
+ length 5d
+ flags fpl, pr
+ }
+
+ task spotlight_feature2_legal "Red Hat PR send spotlight #2 blog entry draft to legal" {
+ precedes !spotlight_feature2_drop
+ length 5d
+ flags fpl, pr
+ }
+
+ task spotlight_feature2_drop "Red Hat PR publish spotlight #2 blog entry" {
+ depends !shadow_spotlight_feature2
+ flags fpl, pr
+ }
+
+ task shadow_spotlight_feature2 "SHADOW: Two weeks until GA" {
+ precedes !!!!LaunchPhase.final { gaplength 11d }
+ length 1d
+ flags hidden
+ }
+ }
+
+ task spotlight_feature3 "Spotlight feature #3" {
+ task spotlight_feature3_draft "Draft spotlight #3 blog entry" {
+ precedes !spotlight_feature3_legal
+ length 5d
+ flags fpl, pr
+ }
+
+ task spotlight_feature3_legal "Red Hat PR send spotlight #3 blog entry draft to legal" {
+ precedes !spotlight_feature3_drop
+ length 5d
+ flags fpl, pr
+ }
+
+ task spotlight_feature3_drop "Red Hat PR publish spotlight #3 blog entry" {
+ depends !shadow_spotlight_feature3
+ flags fpl, pr
+ }
+
+ task shadow_spotlight_feature3 "SHADOW: One week until GA" {
+ precedes !!!!LaunchPhase.final { gaplength 6d }
+ duration 1d
+ flags hidden
+ }
+ }
+ }
+
+ task usb_keys_prebriefs "USB Keys and media pre-briefs" {
+ flags fpl, pr
+
+ task buy_usb_keys "Purchase USB Keys" {
+ precedes !prepare_usb_keys
+ length 5d
+ }
+
+ task assess_press_kit "Check LiveUSB press review sheet for readiness" {
+ precedes !update_press_one_sheet
+ length 5d
+ }
+
+ task update_press_one_sheet "Update LiveUSB press review sheet" {
+ precedes !send_usb_keys
+ length 5d
+ }
+
+ task prepare_usb_keys "Prep USB keys with pre-release" {
+ precedes !send_usb_keys
+ length 5d
+ }
+
+ task send_usb_keys "Send USB keys to Red Hat PR for distribution" {
+ precedes !media_prebriefs {gaplength 10d}
+ length 3d
+ }
+
+ task distribute_usb_keys "Red Hat PR distribute USB keys to media contacts" {
+ precedes !media_prebriefs {gaplength 7d}
+ length 5d
+ }
+
+ task media_prebriefs "Hold media prebrief interviews" {
+ precedes !!!LaunchPhase.final
+ length 6d
+ }
+ }
+
+ task redhat_com_update "Update Red Hat web site" {
+ flags fpl, pr
+
+ task web_graphics_discuss "Schedule meeting with Red Hat web team to plan launch" {
+ length 5d
+ precedes !web_promo_to_brand
+ }
+
+ task web_promo_to_brand "Send web promo ideas to Brand" {
+ length 5d
+ precedes !web_copy_review
+ }
+
+ task web_copy_review "Review and update www.redhat.com/Fedora copy" {
+ length 5d
+ precedes !web_copy_send_update
+ }
+
+ task web_copy_send_update "Send updated copy to Web team" {
+ precedes !rh_web_goes_live { gaplength 11d }
+ length 5d
+ }
+
+ task rh_web_goes_live "Red Hat website changes go live" {
+ depends !!!LaunchPhase.final
+ }
+ }
+
+ task ga_press_release "GA press release" {
+ flags fpl, pr
+
+ task ga_press_release_draft "Start drafting GA press release" {
+ length 10d
+ precedes !ga_press_release_legal
+ }
+
+ task ga_press_release_legal "Red Hat PR send GA press release to Legal" {
+ length 5d
+ precedes !ga_press_release_intl
+ }
+
+ task ga_press_release_intl "Red Hat PR send GA press release to intl-pr list" {
+ length 6d
+ precedes !ga_press_release_drop
+ }
+
+ task ga_press_release_drop "Red Hat PR publish and send GA press release to media contacts" {
+ depends !!!LaunchPhase.final
+ }
+ }
+
+ task ceo_blog "CEO press blog entry" {
+ flags fpl, pr
+
+ task ceo_prepare_final_rc "Prepare a final RC on USB for CEO" {
+ precedes !ceo_send_final_rc
+ length 2d
+ }
+
+ task ceo_send_final_rc "Send final RC USB key to CEO" {
+ precedes !ceo_solicit_feedback
+ length 2d
+ }
+
+ task ceo_solicit_feedback "Solicit CEO feedback on pre-release" {
+ precedes !ceo_blog_draft
+ length 4d
+ }
+
+ task ceo_blog_draft "Draft CEO blog" {
+ precedes !ceo_blog_legal
+ length 3d
+ }
+
+ task ceo_blog_legal "Red Hat PR send CEO blog to Legal" {
+ precedes !ceo_blog_drop
+ length 3d
+ }
+
+ task ceo_blog_drop "Red Hat PR publish and send CEO blog to media contacts" {
+ depends !!!LaunchPhase.final {gaplength 1d}
+ }
+ }
+ }
+
+} # Bitter End
diff --git a/format-weekly-calendar.py b/format-weekly-calendar.py
new file mode 100644
index 0000000..6cc44de
--- /dev/null
+++ b/format-weekly-calendar.py
@@ -0,0 +1,29 @@
+#!/usr/bin/python
+
+# created by James Laska <jlaska@redhat.com>
+# modified by John Poelstra <poelstra@redhat.com>
+
+# This script parses csv files created with a custom report by TaskJuggler
+# It is used to send reminders of upcoming tasks to the team lists
+
+import os
+import sys
+
+if len(sys.argv) == 2:
+ fname = sys.argv[1]
+else:
+ print "Usage: %s <filename>" % sys.argv[0]
+ sys.exit(1)
+
+#print " Start End Name"
+fd = open(fname, "r")
+for line in fd.readlines():
+ #line.strip()
+ (start, end, name) = line[:-1].split(";")
+
+ # remove quotes
+ name = name.replace('"', '')
+ start = start.replace('"', '')
+ end = end.replace('"', '')
+ print "%-11s %-11s %s" % (start, end, name )
+fd.close()
diff --git a/new-schedule.README-INTERNAL b/new-schedule.README-INTERNAL
new file mode 100644
index 0000000..fdf4600
--- /dev/null
+++ b/new-schedule.README-INTERNAL
@@ -0,0 +1,78 @@
+John Poelstra
+poelstra@redhat.com
+2010-10-27
+
+You must follow the same naming conventions for the file names and directories for everything to work with the Red Hat Product pages, etc.
+
+This file should be updated at the beginning of each Fedora release to reflect the current steps for build the next release's schedule
+
+For this example we're assuming that Fedora 15 is the new release and Fedora 14 is the previous release and that you've never setup or used CVS before.
+
+1) Setup a simple aliases to set enviornmental variables for Red Hat's CVS
+ alias envecs='export CVS_RSH=ssh; export CVSROOT=cvs.devel.redhat.com:/cvs/ecs'
+ alias cvsecs='cvs -d :ext:your-kerberos-user-name@cvs.devel.redhat.com:/cvs/ecs'
+
+2) Change to directory that is suitable for saving internal-only Red Hat information and set enviornment variables (e.g. encrypted home directory)
+ $ cd my-encrypted-home-dir
+ $ envecs
+
+3) Check out from internal CVS for the first time -OR-
+ $ cvsecs co program
+
+ OR refresh current checkout
+
+ $ cvsecs up -dP
+
+4) Change to your local 'program/fedora' directory
+ $ cd program/fedora
+
+5) Make a new directory for the new release
+ $ mkdir f-15 (you must follow this naming convention)
+
+6) Commit the new directory to CVS
+ $ addcvs f-15
+
+7) Copy the files from the previous release to the new folder, changing the names as appropriate. Roll the schedules files from the previous release to the new directory. We will use these as a starting place for the new release. IMPORTANT: rename f-14.tjp to f-15.tjp
+ $ cd program/fedora/f-14
+ $ cp f-14.tjp ../f-15/f-15.tjp
+ $ cp combine-art-releng.xsl \
+ combine-docs-releng.xsl \
+ combine-docs-translation.xsl \
+ format-weekly-calendar.py \
+ Makefile \
+ Makefile.custom \
+ reports.tji \
+ self-hosting.readme \
+ new-schedule.README-INTERNAL \
+ ../f-15
+
+8) cd ../fedora/f-15
+
+8) Modify the Makefile to reflect the correct values:
+ MAJOR
+ PRIOR_RELEASE
+
+9) Edit the f-15.tjp file into shape
+ a) update the comments and macros at the start of the file
+ b) remove all "actual" task lengths
+ c) Follow other prescribed steps in f-15.tjp
+
+10) Edit self-hosting.readme to reflect the new version and relevant information
+
+11) Add the new files to CVS
+ $ cd f-15
+ $ cvs add *
+
+12) Commit the files
+ $ cvs ci -m "your commit message"
+
+13) Once you are statisfied that you have an acceptable draft schedule update the master makefile so that the new release schedule is built internally. This is important for the Product Pages to pick up your compiled schedules.
+ add f-15 to program/Makefile
+
+14) Commit program/Makefile to cvs
+
+15) Create a '.cvsignore' file
+ a) $ make (generates schedule files)
+ b) copy/paste report files with "?" in front of them and add them to a file called .cvsignore
+ c) $ cvs add .cvsignore
+ d) $ cvs ci .cvsignore
diff --git a/reports.tji b/reports.tji
new file mode 100644
index 0000000..24ae206
--- /dev/null
+++ b/reports.tji
@@ -0,0 +1,882 @@
+# Report definitions for Fedora 15
+# poelstra@fedoraproject.org
+# 2010-10-27
+
+# These macros are set (editted) mannually each week to create
+# the inidividual team schedule reminders, created by running
+# $ make calendar
+macro weekly_start [2010-11-28] # Sunday
+macro weekly_end [2010-12-15] # Wednesday falling two weeks after starting Sunday
+
+# Define flags for filtered reporting
+flags ambassadors
+flags bugtriage
+flags blocker # use to proof blocker meeting placement
+flags design
+flags devel
+flags docs
+flags elections
+flags fpl
+flags hidden # used to hide tasks that we do not displayed in Fedora reports
+flags infrastructure
+flags interface
+flags key /* use for report of key tasks/high level overview--reflected on Fedora wiki at
+ https://fedoraproject.org/wiki/Releases/15/Schedule */
+flags proto # used for drafting new schedules and shows tasks useful for doing this
+flags pm
+flags pr
+flags marketing
+flags roadmap # major milestones to report in the product pages
+flags translation
+flags quality
+flags releng
+flags spins
+flags web
+
+# These reports are viewable and printable through TaskJugglerUI
+# To enable Gantt charts in these "taskreport" definitions, add "chart" to the end of the "column name" line
+
+/*
+For nicest hardcopy ouput:
+1) Generate schedule in GUI and set zoom (drop town middel/top of the screen) to "Days (small)"
+2) Set printer properties to
+ --landscape
+ --US legal size paper
+3) Select printer name "print to file (pdf)
+4) Specify output location
+5) "Print"
+
+An html gantt chart version is available too, though not a polished as this version
+*/
+
+# Show all teams
+taskreport "All Tasks" {
+ headline "${content_title} ${major} Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask hidden
+}
+
+# Show Ambassadors Tasks
+taskreport "Ambassadors" {
+ headline "${content_title} ${major} Ambassadors Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~ambassadors
+}
+
+# Show Blocker Meeting Tasks
+taskreport "Blocker" {
+ headline "${content_title} ${major} Blocker Bug Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~blocker
+}
+
+# Show Elections Schedule
+taskreport "Elections" {
+ headline "${content_title} ${major} Elections"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~elections
+}
+
+# Design Only
+taskreport "Design Team" {
+ headline "${content_title} ${major} Design Team Tasks & Milestones"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~design | ~isleaf() # filter out parent tasknames like 'supplemental wallpaper process'
+}
+
+# design + releng dates
+taskreport "Design + Key" {
+ headline "${content_title} ${major} Design Team Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~design & ~key
+}
+
+# Development Only
+taskreport "Development" {
+ headline "${content_title} ${major} Development Tasks & Milestones"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~devel
+}
+
+# Documentation Only
+taskreport "Documentation" {
+ headline "${content_title} ${major} Documentation Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~docs
+}
+
+# Documentation & Key Tasks
+taskreport "Documentation + Key" {
+ headline "${content_title} ${major} Documentation + Key Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~docs & ~key
+}
+
+# Documentation & Translation
+taskreport "Docs & Translation" {
+ headline "${content_title} ${major} Documentation & Translation Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~docs & ~translation & ~key
+}
+
+# Fedora Project Leader
+taskreport "Fedora Project Leader" {
+ headline "${content_title} ${major} FPL Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~fpl
+}
+
+# Media/Public Relations
+taskreport "Media/Public Relations" {
+ headline "${content_title} ${major} Media/PR Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~pr
+}
+
+taskreport "Infrastructure" {
+ headline "${content_title} ${major} Key Tasks & Milestones"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~infrastructure
+}
+
+# Key Tasks Only--Agrees to
+# http://poelstra.fedorapeople.org/schedules/f-14/f-14-key-tasks.html
+taskreport "Key" {
+ headline "${content_title} ${major} Key Tasks & Milestones"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~key
+}
+
+# taskreport "Key (planned)" {
+# headline "${content_title} ${major} Key Tasks & Milestones"
+# sorttasks startup
+# columns name, start, end, duration
+# timeformat "%a %d-%b-%Y"
+# loadunit days
+# scenario plan
+# hidetask ~key
+# }
+
+# Project Management Only
+taskreport "Project Manager" {
+ headline "${content_title} ${major} Project Management Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~pm & ~blocker
+}
+
+# Marketing Only
+taskreport "Marketing" {
+ headline "${content_title} ${major} Marketing Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~marketing
+}
+
+# Quality Assurance Only
+taskreport "Quality Assurance" {
+ headline "${content_title} ${major} Quality Assurance Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~quality
+}
+
+# Quality Assurance Only
+taskreport "Quality & Release Engineering" {
+ headline "${content_title} ${major} Quality Assurance & Release Engineering"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~quality & ~releng
+}
+
+# Release Engineering Only
+taskreport "Release Engineering" {
+ headline "${content_title} ${major} Release Engineering Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~releng
+}
+
+# Spins
+taskreport "Spins" {
+ headline "${content_title} ${major} Spins Tasks"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~spins
+}
+
+# Spins + Key
+taskreport "Spins + Key" {
+ headline "${content_title} ${major} Spins + Key Tasks"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~spins & ~key
+}
+
+# Translation Only
+taskreport "Translation" {
+ headline "${content_title} ${major} Translation Tasks & Milestones"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~translation
+}
+
+# Translation + Key
+taskreport "Translation + Key" {
+ headline "${content_title} ${major} Translation + Key Tasks"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~translation & ~key
+}
+
+# Web Only
+taskreport "Web Team" {
+ headline "${content_title} ${major} Web Team Tasks & Milestones"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~web
+}
+
+# Web + Key
+taskreport "Web + Key" {
+ headline "${content_title} ${major} Web Team + Tasks & Milestones"
+ sorttasks startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~web & ~key
+}
+
+# "Proto" is short for "protoype". It is used to filter tasks
+# flagged as "proto" for protoyping new release schedules
+# start name with an "a" so it is at the start of the list
+taskreport "Proto" {
+ headline "DRAFT ${content_title} ${major} Prototype"
+ sorttasks startup, nameup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~proto
+}
+
+taskreport "Development + Key" {
+ headline "${content_title} ${major} Combo Devel"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask (~devel & ~key)
+}
+
+taskreport "Hidden Tasks (debug)" {
+ headline "${content_title} ${major} Hidden"
+ sorttasks tree, startup
+ columns name, start, end, duration
+ timeformat "%a %Y-%b-%d"
+ loadunit days
+ scenario actual
+ hidetask ~hidden
+}
+
+# E N D of G A N T T / U I R E P O R T definitions
+
+# All Teams
+macro all_navbar [
+
+rawhead
+ '<table align="center" border="0">
+ <tr>
+ <td><a href="${content}-${major}-all-tasks.html">All</a></td>
+ <td><a href="${content}-${major}-ambassadors-tasks.html">Ambassadors</a></td>
+ <td><a href="${content}-${major}-design-tasks.html">Design</a></td>
+ <td><a href="${content}-${major}-devel-tasks.html">Devel</a></td>
+ <td><a href="${content}-${major}-docs-tasks.html">Docs</a></td>
+ <td><a href="${content}-${major}-elections.html">Elections</a></td>
+ <td><a href="${content}-${major}-fpl.html">Project Leader</a></td>
+ <td><a href="${content}-${major}-infrastructure.html">Infrastructure</a></td>
+ <td><a href="${content}-${major}-key-tasks.html">Key</a></td>
+ <td><a href="${content}-${major}-marketing-tasks.html">Marketing</a></td>
+ <td><a href="${content}-${major}-pm-tasks.html">PM</a></td>
+ <td><a href="${content}-${major}-pr.html">Media/PR</a></td>
+ <td><a href="${content}-${major}-quality-tasks.html">Quality</a></td>
+ <td><a href="${content}-${major}-releng-tasks.html">RelEng</a></td>
+ <td><a href="${content}-${major}-spins-tasks.html">Spins</a></td>
+ <td><a href="${content}-${major}-trans-tasks.html">Translation</a></td>
+ <td><a href="${content}-${major}-web-tasks.html">Web</a></td>
+ <td>||</td>
+ <td><a href="http://poelstra.fedorapeople.org/schedules/f-14/">F14</a></td>
+ <td><a href="http://poelstra.fedorapeople.org/schedules/f-13/">F13</a></td>
+ </tr>
+ </table>'
+]
+
+htmltaskreport "${content}-${major}-all-tasks.html" {
+ ${all_navbar}
+ headline "${content_title} ${major} Tasks"
+ columns name, start, end, duration
+ sorttasks tree, startup
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ( hidden )
+}
+
+icalreport "${content}-${major}-all-milestones.ics" {
+ hidetask ~isMilestone()
+ scenario actual
+}
+
+# Ambassador Team Reports
+htmltaskreport "${content}-${major}-ambassadors-tasks.html" {
+ ${all_navbar}
+ headline "${content_title} ${major} Ambassadors Team Tasks"
+ sorttasks tree, startup
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~ambassadors
+}
+
+icalreport "${content}-${major}-ambassadors.ics" {
+ hidetask (~isMilestone() | ~ambassadors)
+ scenario actual
+}
+
+# Design Team Reports
+htmltaskreport "${content}-${major}-design-tasks.html" {
+ ${all_navbar}
+ headline "${content_title} ${major} Design Team Tasks"
+ sorttasks startup
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~design
+}
+
+icalreport "${content}-${major}-design.ics" {
+ hidetask (~isMilestone() | ~design)
+ scenario actual
+}
+
+
+# Development Team Reports
+htmltaskreport "${content}-${major}-devel-tasks.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} Development Team Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~devel
+}
+
+icalreport "${content}-${major}-devel.ics" {
+ hidetask (~isMilestone() | ~devel)
+ scenario actual
+}
+
+# Docs Team Reports
+htmltaskreport "${content}-${major}-docs-tasks.html" {
+ ${all_navbar}
+ sorttasks startup # report all tasks in sequential order
+ headline "${content_title} ${major} Docs Team Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~docs
+}
+
+htmltaskreport "${content}-${major}-docs-tree-tasks.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} Docs Team Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~docs
+}
+
+icalreport "${content}-${major}-docs.ics" {
+ hidetask (~isMilestone() | ~docs)
+ scenario actual
+}
+
+# Elections
+htmltaskreport "${content}-${major}-elections.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} Elections "
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~elections
+}
+
+# FPL
+htmltaskreport "${content}-${major}-fpl.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} FPL"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~fpl
+}
+
+icalreport "${content}-${major}-fpl.ics" {
+ scenario actual
+ hidetask ~fpl
+}
+
+# PR
+htmltaskreport "${content}-${major}-pr.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} Media/PR"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~pr
+}
+
+icalreport "${content}-${major}-pr.ics" {
+ hidetask ~pr
+ scenario actual
+}
+
+# Infrastructure
+htmltaskreport "${content}-${major}-infrastructure.html" {
+ ${all_navbar}
+ sorttasks startup
+ headline "${content_title} ${major} Infrastructure Freezes"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~infrastructure
+}
+
+
+# key tasks
+# this report mirrors what should be on the wiki
+# https://fedoraproject.org/wiki/Releases/14/Schedule
+htmltaskreport "${content}-${major}-key-tasks.html" {
+ ${all_navbar}
+ headline "${content_title} ${major} Key Tasks & Milestones"
+ columns name, start, end
+ sorttasks startup
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~key
+}
+
+icalreport "${content}-${major}-key.ics" {
+ hidetask (~isMilestone() | ~key)
+ scenario actual
+}
+
+# Marketing Team Reports
+htmltaskreport "${content}-${major}-marketing-tasks.html" {
+ ${all_navbar}
+ sorttasks startup
+ headline "${content_title} ${major} Marketing Team Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~marketing
+}
+
+icalreport "${content}-${major}-marketing.ics" {
+ hidetask (~isMilestone() | ~marketing)
+ scenario actual
+}
+
+# Release Engineering Team Reports
+htmltaskreport "${content}-${major}-releng-tasks.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} Releng Team Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~releng
+}
+
+icalreport "${content}-${major}-releng.ics" {
+ hidetask (~isMilestone() | ~releng)
+ scenario actual
+}
+
+# Quality Team Reports
+htmltaskreport "${content}-${major}-quality-tasks.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} Quality Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~quality
+}
+
+icalreport "${content}-${major}-quality.ics" {
+ hidetask (~isMilestone() | ~quality)
+ scenario actual
+}
+
+# Spins SIG Reports
+htmltaskreport "${content}-${major}-spins-tasks.html" {
+ ${all_navbar}
+ sorttasks startup
+ headline "${content_title} ${major} Spins SIG Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~spins
+}
+
+icalreport "${content}-${major}-spins.ics" {
+ hidetask (~isMilestone() | ~spins)
+ scenario actual
+}
+
+# Translation Team Reports
+htmltaskreport "${content}-${major}-trans-tasks.html" {
+ ${all_navbar}
+ sorttasks tree, startup
+ headline "${content_title} ${major} Translation Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~translation
+}
+
+icalreport "${content}-${major}-translation.ics" {
+ hidetask (~isMilestone() | ~translation)
+ scenario actual
+}
+
+# Web Team Reports
+htmltaskreport "${content}-${major}-web-tasks.html" {
+ ${all_navbar}
+ sorttasks startup # leave out "tree" because major headings clutter report unnecessarily
+ headline "${content_title} ${major} Web Team Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~web & ~infrastructure
+}
+
+icalreport "${content}-${major}-web.ics" {
+ hidetask (~isMilestone() | ~web)
+ scenario actual
+}
+
+
+### Miscelaneous reports ###
+
+htmltaskreport "${content}-${major}-pm-tasks.html" {
+ ${all_navbar}
+ sorttasks startup
+ headline "${content_title} ${major} Project Management Tasks"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~pm
+}
+
+icalreport "${content}-${major}-pm.ics" {
+ hidetask (~isMilestone() | ~pm)
+ scenario actual
+}
+
+htmltaskreport "${content}-${major}-blocker-meetings.html" {
+ ${all_navbar}
+ sorttasks startup
+ headline "${content_title} ${major} Blocker Meeting"
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~blocker & ~key
+}
+
+
+# XML report that contains all info about the scheduled project.
+# This report export the entire schedule for outside parsing and analysis
+# This is required for other teams--DO NOT REMOVE
+xmlreport "${content}-${major}-v1.tjx" {
+ version 1
+ scenarios actual
+}
+
+# XML report that contains all info about the scheduled project.
+# This report export the entire schedule for outside parsing and analysis
+# This is required for other teams--DO NOT REMOVE
+xmlreport "${content}-${major}-gold.tjx" {
+ version 2
+ scenarios actual, plan
+}
+
+# Text export of entire schedule for outside parsing and analysis
+# This is required for other teams--DO NOT REMOVE
+csvtaskreport "${content}-${major}.csv" {
+ columns name, id, note, resources, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenario actual
+ hidetask ~isTaskOfProject(${content}${major}) # useful filter if doing an "include" from other schedules
+}
+
+# Reports for weekly emails to team lists
+# These reports are post-processed by 'format-weekly-calendar.py'
+csvtaskreport "${content}-${major}-ambassadors-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~ambassadors
+}
+csvtaskreport "${content}-${major}-design-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~design
+}
+
+csvtaskreport "${content}-${major}-devel-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~devel
+}
+
+csvtaskreport "${content}-${major}-docs-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~docs
+}
+
+csvtaskreport "${content}-${major}-fpl-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~fpl
+}
+
+csvtaskreport "${content}-${major}-infrastructure-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~infrastructure
+}
+
+csvtaskreport "${content}-${major}-marketing-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~marketing
+}
+
+csvtaskreport "${content}-${major}-pm-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~pm
+}
+
+csvtaskreport "${content}-${major}-pr-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~pr
+}
+
+csvtaskreport "${content}-${major}-quality-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~quality
+}
+
+csvtaskreport "${content}-${major}-releng-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~releng & ~devel
+}
+
+csvtaskreport "${content}-${major}-spins-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~spins
+}
+
+csvtaskreport "${content}-${major}-trans-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~translation
+}
+
+csvtaskreport "${content}-${major}-web-weekly.csv" {
+ start ${weekly_start}
+ end ${weekly_end}
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~web
+}
+
+# reports for new schedule prototyping and planning
+# not used once the release gets rolling
+csvtaskreport "${content}-${major}-plan.csv" {
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ scenario actual
+ hidetask ~releng & ~quality
+}
+
+htmltaskreport "${content}-${major}-draft-schedule.html" {
+ headline "${content_title} ${major} Primary Tasks"
+ sorttasks startup
+ columns no, name, start, end, duration
+ timeformat "%a %Y-%m-%d"
+ scenarios actual
+ hidetask ~proto
+}
+
+csvtaskreport "${content}-${major}-devel.csv" {
+ sorttasks startup
+ columns start, end, name
+ timeformat "%a %d-%b"
+ separator " "
+ scenario actual
+ hidetask ~devel
+} \ No newline at end of file
diff --git a/self-hosting.readme b/self-hosting.readme
new file mode 100644
index 0000000..078cbc2
--- /dev/null
+++ b/self-hosting.readme
@@ -0,0 +1,30 @@
+# poelstra@fedoraproject.org
+# November 2010
+#
+# BIG FAT WARNING (2009-12-03):
+# Building the *.ics (iCal) files with the currently released version of TaskJuggler will not generate
+# generate the same files that are posted at http://poelstra.fedorapeople.org/schedules/f-15/
+# I build the ics files using a patched version of TaskJuggler and a post build parsing routine
+
+To build this TaskJuggler schedule yourself follow these steps:
+1) Install TaskJuggler if you don't have it already
+$ su -c 'yum install taskjuggler'
+
+2) Download all of the files in this source directory to a local directory. For example,
+$ mkdir ~/schedules
+$ cd !$
+$ wget --no-directories -np --reject index.html\* -r http://poelstra.fedorapeople.org/schedules/f-15/source/
+
+3) Build and view the source file using one of two methods by:
+ $ cd ~/schedules
+ a) $ TaskJugglerUI f-15.tjp and then click on the "clock" icon to build
+ -or-
+ b) $ make
+
+4) To modify the schedule edit the source file. The source file can be edited directly with a text editor or using the TaskJuggler GUI. For example,
+$ vim f-15.tjp
+
+5) To modify the reports, edit reports.tji
+
+6) Lots of good information about using TaskJuggler can be found in the user manual: http://www.taskjuggler.org/download/manual-2.4.3.pdf
+