Manchester City will face Chelsea in the Champions League final on May 29.
Here, the PA news agency looks at their route to the final.
Group stage (Man City 16pts, Porto 13, Olympiacos 3, Marseille 3)
City’s campaign got off to a less-than-ideal start as they fell behind early in their first game against Porto but that proved a mere hiccup as they hit back to win 3-1 at the Etihad Stadium and then cruise through the rest of the group stage. Qualification was secured with victories over Marseille (3-0) and Olympiacos (3-0 and 1-0) before an ill-tempered goalless draw at Porto clinched top spot in Group C. They wrapped up the first phase with another 3-0 win over Marseille.
Last 16: Borussia Monchengladbach (won 4-0 on aggregate)
Coronavirus restrictions meant both legs were played on neutral territory in Budapest but City enjoyed both their visits to Puskas Arena, winning 2-0 on each occasion. Goals from Bernardo Silva and Gabriel Jesus put City in command of the tie in the ‘away’ leg before early strikes from Kevin De Bruyne and Ilkay Gundogan settled the return.
Quarter-finals: Borussia Dortmund (won 4-2 on aggregate)
City came through their first real test of this year’s competition to reach the semi-finals, finally, after three successive quarter-final failures. Phil Foden scored a last-gasp winner as City claimed a 2-1 lead after a tight first game at the Etihad, where Marco Reus looked to have secured a draw after cancelling out De Bruyne’s opener. The impressive Jude Bellingham, who wrongly had a goal disallowed in the first leg, levelled the tie early in the return at Signal Iduna Park but City powered back. De Bruyne hit the bar and Riyad Mahrez had an effort cleared off the line before the Algerian settled nerves from the penalty spot. Foden put the result beyond doubt with another winner.
Semi-finals: Paris St Germain (won 4-1 on aggregate)
City produced one of their finest performances under Pep Guardiola to beat the star-studded PSG, last year’s runners-up, impressively over two legs. The French made the early running in the opener at the Parc des Princes and claimed the lead with a Marquinhos header but City were a different side in the second half. Both De Bruyne’s equaliser and Mahrez’s winner – a cross that bounced in and a free-kick that flew through a gap in the wall respectively – were fortuitous but City were dominant. PSG lost their discipline and Idrissa Gana Gueye was sent off. They regrouped for the second leg but injury robbed them of star striker Kylian Mbappe and Neymar could not find a way through. Paris-born Mahrez struck in each half as City twice caught them out on the counter-attack. Again a rattled PSG ended with 10 men after Angel Di Maria was dismissed for a petulant stamp on Fernandinho.