An important question related to CI builds is what to make of discarded builds.
If we're speaking of a linear history, it's simple: just use a moving tag, be it latest or testing.
But if there's a question of validating MRs, one has either to use tags based on the changeset (obvious question of garbage collecting arises) or on the MR number (needs GC also, but less severely).
Also, once there's an automated build, there should be daily ones so that, e.g., rebuilding ci-base would lead to a rebuild of its immediate dependencies the next night, then of level 2 deps etc. Daily rebuilds are also needed to absorb upstream changes gradually - we'll get a more steady flow of build instability, but we'll be less wary of breaking everything as I'm personally am with the current manual system.
I'm not sure we would want a full rebuild of everything - and the current makefile system is probably already at its practical limits.