Roodepoort held on for a 20-18 victory over Hamiltons and will play Impala in the Community Cup final on Monday.
Roodepoort were in control for much of the game, and survived a late onslaught from Hamiltons.
Hamiltons flyhalf Shane Vallender kept his side in the game with six successful penalties. Then, as the hooter sounded, he was given the chance to kick a match-winning three-pointer, but it was well wide.
Roodepoort captain Gerhard Scholtz had burrowed his way over the tryline from short range after a brilliant run from lock Nicky Cronjé, but the crucial score came in the 71st minute, when centre Jesse Geyer forced his way over after receiving a short pass from scrumhalf André Esterhuizen to take the lead from Hamiltons.
In the earlier semi-final, Impala beat College Rovers 32-13. The men from Rustenburg scored four tries through Earl Lewis, Naas Olivier and a double from Michael Nienaber, while Rovers could manage only one, from Quinton Crocker. College Rovers never got going, making too many mistakes.
In the other games of the day, Despatch redeemed themselves from their quarter-final exit on Thursday by beating Centurion 23-21 and Roses United beat Old Selbornians 39-31 in a thrilling encounter.
Semi-final results:
Impala 32 College Rovers 13
Roodepoort 20 Hamiltons 18