[fpc-devel] [RFC] Modernising the FPC Release Process -- Proposal for Review
Graeme Geldenhuys
mailinglist at geldenhuys.co.uk
Sat Apr 18 00:55:14 CEST 2026
On Friday, 17 April 2026 15:21:08 BST Martin Frb via fpc-devel wrote:
> If I do my own commits (even If it was decided that every change, even
> single commits changes would go through a branch), then I would want to
> merge those branches locally.
> Going to the web interface requires me to involve an additional tool,
> switching to my browser, needing my browser to go to another tab, ...
> It may just be a few clicks. Its still less if I do it locally.
Gitlab is just another tool. Yes, the FPC team chose it years ago - they must
have had specific reasons. But the same workflow can be done without GitLab,
by using "pure git" alone.
Here are the three most effective ways to recreate that workflow using pure Git.
1. Unique Tag Names (The "Suffix" Method)
You give each merge commit (or single commit) its own unique tag within a
namespace.
The Tag: patch-candidate/v3.2.4/mr-101, patch-candidate/v3.2.4/mr-105,
etc.
The Extraction: You use a wildcard search to find every tag in that
"folder."
Bash
git tag -l "patch-candidate/v3.2.4/*"
Pros: Very easy to filter; tags are permanent and searchable.
Cons: Can clutter your tag list if you have hundreds of MRs (though
namespaces like patch-candidate/ help).
2. Standardized Commit Trailers (The "Linux Kernel" Way)
Large open-source projects often use "trailers" (key-value pairs at the end of
a commit message) to track metadata.
The Workflow: When merging an MR, ensure the merge commit message (or the
squashed commit) includes a specific string.
Example: Fixes: #1234. Target-Release: 1.2.1
The Extraction: You use git log with the --grep flag to find everything
marked for that release.
Bash
git log main --grep="Target-Release: 1.2.1" --format="%H"
This command returns a list of commit hashes that you can then pipe
directly into git cherry-pick.
3. The "Integration Branch" Strategy (what "Git" project itself uses)
Instead of labeling individual commits, you use a temporary branch as a
"bucket" for the next release.
The Workflow: Every time an MR is merged into main that also needs to go to
fixes, you immediately cherry-pick it into a "staging" branch called fixes-
pending.
The Extraction: When it’s time for the actual release, you simply merge
fixes-pending into fixes.
Pros: No need to "find" commits later; they are already gathered.
Cons: Requires immediate action at the time of the original merge, which
might be a context switch for the developer.
All three are viable, and you could even use it with Gitlab too. But Gitlab is
not a requirement.
Regards,
Graeme
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20260417/8ea1a2d3/attachment-0001.sig>
More information about the fpc-devel
mailing list