Some notes about a possible release engineering process: - On release branches (created at X.Y-RC) commits may only be made by members of the security officer or release engineering teams. Also, patch level releases (X.Y.Z) are made off of the RELENG_X_Y branch and should be rare to non-existant. - Whenever a branch tag is made, it actually consists of two tags. First, a static tag FOO_BP is laid to mark the start of the branch, due to CVS stupidity since we can't diff against the start of a branch otherwise. Then a branch tag FOO is created. Timeline for a -branch release X.Y (Y != 0): - 4 weeks prior to release: - an announcement about the pending release including the timeline of events is sent to -developers, -stable, and -qa - 3 weeks prior to release: - -stable enters code freeze, all the massive MFC sprees need to be completed at this point in time. - X.Y-BETA snap is rolled and released for testing. - 2 weeks prior to release: - a new sidebranch for this release is branched from -stable: RELENG_X_Y. The release will come from this branch. After the release, it can be used for backporting security updates and for patch releases. On this branch the code freeze hardens. Only extremely drastic bugs (trivial kernel panics, trivial local root holes) are allowed to be committed to the release now. To denote this, newvers.sh becomes X.Y-RC. - a new release is cut from the branchpoint and released as X.Y-RC. - A message is sent to -stable, -qa, and -announce soliciting testing of this snapshot. - release day: - RELENG_X is unfrozen and becomes X.Y-STABLE - after hopefully 2 weeks of no commits, newvers.sh on the release branch is bumped to X.Y-RELEASE, and the RELENG_X_Y_0_RELEASE tag is laid. Timeline for a head release X.0: This is mostly similar to the -stable timeline except more spread out: - 8 weeks prior to release: - send announcement and timeline to -developers, -current, and -qa - 6 weeks prior to release: - code slush, only bugfixes, and no new features, should also keep performance tweaks to a minimum - 4 weeks prior to release: - code freeze - X.0-BETA named - X.0-BETA-1 snap released and sent out for testing - 3 weeks prior to release: - X.0-BETA-2 snap released and sent out for testing - 2 weeks prior to release: - RELENG_X_0 branched from head - hard code freeze on side branch - X.0-RC in newvers.sh - X.O-RC-1 released and sent out for testing, this should probably be announced on -current, -qa, and -announce - HEAD enters pseudo-code slush (bug fixes and optimizations, minor new features, but no big arch changes or really "large" new features) until RELENG_X is branched; HEAD is named X.0-CURRENT again - 1 week prior to release: - X.0-RC-2 released and sent out for testing, announced on -current, -qa, and -announce - release day: - RELENG_X_0_0_RELEASE tagged and X.0-RELEASE released Some notes about a possible release engineering team: - One Principal R.E. who oversees the entire team and is "chairman" of the team. - Lays all tags and coordinates the efforts of the rest of the team. - Ensures that snaps for all arch's are released at the same time. - Sends out announcement e-mails. - release_engineer@FreeBSD.org - One R.E. per arch that is responsible for building snaps, X bits, etc. and delivering them to the Principal R.E. - -releng@FreeBSD.org - A QA Engineer who coordinates with the -qa team to keep both sides in sync. - Helps design and implement test suites. - We might also want to have per-arch QA Engineers. We already have a sort of de facto one for alpha. - qa-releng@FreeBSD.org - A Ports R.E. to ensure the ports are being built and laid out for the given CD's. This is right now done between portmgr@ and Steve Price. - We might also want to have per-arch helpers here as well. - ports-releng@FreeBSD.org - A Doc R.E. to do doc tagging, etc. Nik pretty much does this right now. - doc-releng@FreeBSD.org - The releng@ mail alias would consist of: release_engineer, -releng, qa-releng, ports-releng, and doc-releng.