@@ -13,7 +13,7 @@ Overall Development Cycle
1313For a typical update to an existing package, the overall development cycle is roughly as follows:
1414
15151 . Download the new upstream source (tarball, source RPM, checkout) into
16- [ the UW AFS upstream area] ( ../software/rpm-development-guide.md#upstream-source-cache )
16+ [ the CHTC upstream area] ( ../software/rpm-development-guide.md#upstream-source-cache )
17172 . In [ a checkout of our packaging code] ( ../software/rpm-development-guide.md#revision-control-system ) ,
1818 update [ the reference to the upstream file] ( ../software/rpm-development-guide.md#upstream ) and,
1919 as needed, [ the RPM spec file] ( ../software/rpm-development-guide.md#osg )
@@ -22,25 +22,10 @@ For a typical update to an existing package, the overall development cycle is ro
22225 . Optionally, lightly test the new RPM(s); if there are problems, redo previous steps until success
23236 . Use [ osg-build] ( ../software/osg-build-tools.md#osg-build ) to perform an official build of the updated package
2424 (which will go into the development repos)
25- 7 . Perform standard developer testing of the new RPM(s) — see below for details
26- 8 . Obtain permission from the Software Manager to promote the package
25+ 7 . Perform standard developer testing of the new RPMs; this generally means running the VM Universe tests - see below for details
26+ 8 . Have another software team member review your testing and give you permission to promote the package
27279 . Promote the package to testing — see below for details
2828
29- Versioning Guidelines
30- ---------------------
31-
32- OSG-owned software should contain three digits, X.Y.Z, where X represents the major version, Y the minor version,
33- and Z the maintenance version.
34- New releases of software should increment one of the major, minor, or maintenance according to the following guidelines:
35-
36- - ** Major:** Major new software, typically (but not limited to) full rewrites, new architectures, major new features;
37- can certainly break backward compatibility (but should provide a smooth upgrade path). Worthy of introduction into Upcoming.
38- - ** Minor:** Notable changes to the software, including significant feature changes, API changes, etc.;
39- may break compatibility, but must provide an upgrade path from other versions within the same Major series.
40- - ** Maintenance:** Bug fixes, minor feature tweaks, etc.;
41- must not break compatibility with other versions within the same Major.Minor series.
42-
43- If you are unsure about which version number to increment in a software update, consult the Software Manager.
4429
4530Build Procedures
4631----------------
@@ -49,98 +34,100 @@ Build Procedures
4934### Verifying builds through GitHub Actions
5035-->
5136
52- ### Building packages for multiple OSG release series
37+ ### Initial repo setup
5338
54- The OSG Software team supports multiple release series, independent but in parallel to a large degree.
55- In many cases, a single package is the same across release series, and therefore we want to build the package once
56- and share it among the series.
57- The procedure below suggests a way to accomplish this task.
39+ 1 . Create your own fork of the < https://github.com/osg-htc/software-packaging > repository.
40+ 2 . Clone your fork, then add the upstream repository as a remote (replacing ` <YOURNAME> ` with your GitHub username):
5841
59- Current definitions:
42+ :::console
43+ $ git clone https://github.com/<YOURNAME>/software-packaging
44+ $ git remote add upstream https://github.com/osg-htc/software-packaging
6045
61- - maintenance: OSG 3.4 ( ** trunk** )
62- - current: OSG 3.5 ( ** branches/osg-3.5** )
6346
64- <!--
65- - future: OSG 3.6 ( *branches/osg-3.6* )
66- -->
47+ ### Basic building
6748
68- Procedure:
69-
70-
71- 1 . Make changes to ** trunk**
72- 2 . Optionally, make and test a scratch build from ** trunk**
73- 3 . Commit the changes
74- 4 . Make an official build from ** trunk** (e.g.: ` osg-build koji <PACKAGE> ` )
75- 5 . Perform the standard 4 tests for the ** current** series (see below)
76- 6 . Merge the relevant commits from ** trunk** into the ** maintenance** branch (see below for tips)
77- 7 . Optionally, make and test a scratch build from the ** maintenance** branch
78- 8 . Commit the merge
79- 9 . Make an official build from the ** maintenance** branch (e.g.: ` osg-build koji --repo=3.4 <PACKAGE> ` )
80- 10 . Perform the standard 4 tests for the ** maintenance** series (see below)
81- 11 . As needed (or directed by the Software manager), perform the cross-series tests (see below)
82-
83- !!! note
84- Do not change the RPM Release number in the ** maintenance** branch before rebuilding;
85- the ` %dist ` tag will differ automatically, and hence the ** maintenance** and ** current** NVRs will not conflict.
86-
87- <!--
88- 1. Make changes to the *trunk*
89- 2. Optionally, make and test a scratch build from the *trunk*
90- 3. Commit the changes
91- 4. Make an official build from the *trunk* (e.g.: `osg-build koji <PACKAGE>`)
92- 5. Perform the standard 4 tests for the *current* series (see below)
93- 6. Merge the relevant commits from the *trunk* into the *future* branch (see below for tips)
94- 7. Optionally, make and test a scratch build from the *future* branch
95- 8. Commit the merge
96- 9. Make an official build from the *future* branch (e.g.: `osg-build koji --repo=3.6 <PACKAGE>`)
97- 10. Perform install tests for the *future* series (see below)
98- 11. As needed (or directed by the Software manager), perform the cross-series tests (see below)
99- -->
49+ <!-- TODO flesh this out -->
50+
51+ 1 . Make changes
52+ 2 . Make a scratch build
53+ 3 . If you have permissions, push directly upstream
54+
55+ :::console
56+ $ git push upstream main
10057
101- ### Merging changes from one release series to another
58+ If you do not have permissions, or want your changes reviewed,
59+ push to a branch on your own fork and make a Pull Request
60+ 4 . Make a non-scratch build
10261
103- These instructions assume that you are merging from ` trunk ` to ` branches/osg-3.5 ` .
104- They also assume that the current directory you are in is a checkout of ` branches/osg-3.5 ` .
105- I will use ` $pkg ` to refer to the name of your package.
10662
107- First, you will need the commit numbers for your changes:
63+ ### Building packages for multiple OSG release series
64+
65+ The OSG Software team supports two release series in parallel;
66+ many of the packages are identical or very similar between release series,
67+ and you will be making the same change to a package across both release series.
68+
69+ We recommend using a diffing tool such as Meld (Linux) or WinMerge (Windows) that is capable of comparing
70+ directories and not just individual files, to make sure all the changes are carried over.
71+
72+ This is one example workflow, using the "23-main" and "24-main" release series,
73+ and the package "xrdcl-pelican" which is identical between the two release series.
10874
109- svn log \^/native/redhat/trunk/$pkg | less
75+ 1 . Make changes to ` 24-main/xrdcl-pelican `
76+ 2 . Make a scratch build (e.g. ` osg-build koji --scratch 24-main/xrdcl-pelican ` )
77+ 3 . Open ` 23-main/xrdcl-pelican ` and ` 24-main/xrdcl-pelican ` in a diffing tool, and copy
78+ over all the changes
79+ 4 . ` git add ` and ` git commit ` the changes; committing the changes to both series in the same commit
80+ means you don't have to write the commit message twice,
81+ and ` git blame ` will be accurate for both release series
82+ 5 . ` git push ` to the upstream repo
83+ 6 . Make non-scratch builds; use the following procedure to submit both at the same time:
11084
111- Write down the commits you want to merge.
85+ :::console
86+ $ osg-build koji --nowait 24-main/xrdcl-pelican
87+ $ osg-build koji --nowait 23-main/xrdcl-pelican
88+ $ osg-koji watch-task --mine
11289
113- If you only have one commit, merge that commit with -c as follows:
11490
115- svn merge -c $commit_num \^/native/redhat/trunk/$pkg $pkg
91+ If your development process is more iterative and you need multiple commits,
92+ you could do something like the following (using ` xrootd ` as an example):
11693
117- Where ` $commit_num ` is the SVN revision number of that commit (e.g. 17000).
118- Merging an individual change like this is referred to as "cherry-picking".
94+ 1 . Make changes to ` 24-main/xrootd `
95+ 2 . Make a scratch build as above
96+ 3 . Commit your changes as a "checkpoint"
97+ 4 . Repeat 1-3 as necessary until you think you are ready for a non-scratch build
98+ 5 . Copy your changes to ` 23-main ` using a diffing tool as above
99+ 6 . You now have two options:
119100
120- If you have a range of commits and you wish to merge all commits within that range, then do the following:
101+ - If you haven't pushed, then you can do an interactive rebase to squash your changes to
102+ ` 23-main ` and ` 24-main ` down to one commit
121103
122- svn merge -r $start_num:$end_num \^/native/redhat/trunk/$pkg $pkg
104+ - If you have already pushed, get a log of the recent changes to ` 24-main/xrootd ` :
123105
124- Where ` $start_num ` is the SVN revision of the commit * BEFORE* your first commit,
125- and ` $end_num ` is the SVN revision of your last commit in that range.
126- ** Note:** Be very careful when merging a range from trunk into the maintenance branch
127- so that you do not introduce more changes to the maintenance branch than are necessary.
106+ :::console
107+ $ git --no-pager log --oneline --since='last week' --reverse -- 24-main/xrootd
128108
129- If you have multiple commits but they are not contiguous (i.e. there are commits made by you or someone else in that range
130- that you do not want to merge), you will need to cherry-pick each individual commit.
109+ Copy and paste that to a text editor.
110+ Then, when you write the commit message for the commit to ` 23-main/xrootd ` ,
111+ reference the commits from that command.
112+ For example:
131113
132- svn merge -c $commit1 \^/native/redhat/trunk/$pkg $pkg
133- svn merge -c $commit2 \^/native/redhat/trunk/$pkg $pkg
134- ...
114+ 23-main/xrootd: Update xrootd to 5.8.4 and add various patches
135115
136- Where ` $commit1 ` , ` $commit2 ` are the commit numbers of the individual changes.
116+ Includes the following commits from 24-main/xrootd:
117+
118+ 8061d7d40 24-main/xrootd: update to 5.8.4; update patches, bring spec file closer to upstream
119+ 13b858dce 24-main/xrootd: add some more patches
120+ 773f57f21 24-main/xrootd: Add TPC worker pool patch
121+
122+ Keeping the Git hashes will make future archaeology easier.
137123
138- Note that merge tracking in recent versions of SVN (1.5 or newer) should prevent commits from accidentally being merged multiple times.
139- You should still look out for conflicts and examine the changes via ` svn diff ` before committing the merge.
140124
141125Testing Procedures
142126------------------
143127
128+ !!!note
129+ This section is out of date
130+
144131Before promoting a package to a testing repository, each build must be tested lightly from the development repos
145132to make sure that it is not completely broken, thereby wasting time during acceptance testing.
146133Normally, the person who builds a package performs the development testing.
@@ -222,6 +209,9 @@ essentially restarting the development cycle.
222209
223210### Preparing a Good Promotion Request
224211
212+ !!!note
213+ This section is out of date
214+
225215Developers must obtain permission from the OSG Software manager to promote a package from development to testing.
226216A promotion request goes into at least one affected JIRA ticket and will be answered there as well.
227217Below are some tips for writing a good promotion request:
0 commit comments