I build images from four branches. Three standard (main, stable/<latest>, releng/<latest>) and one non-standard: my own stable/15 which is main, checked out to the monthly suggested stabilization week commit.
I name the images after the version number they will ultimately produce. releng is obviously fixed. stable/14 produces 14.4. stable/15 produces 15.0, and main is always just main.
When new releases come out, I update the config to point to the correct branches. When 14.4 gets released, stable/14 will start producing 14.5, if there will be a 14.5
The point is, I'm always building the next minor and major versions and can test against them. The infrastructure naturally supports the maturation of any given release. I'm always thinking in terms of major and minor version, and whether that's produced by releng/ stable/ or main doesn't matter much to me.