Paul Harsley’s side were three goals to the good inside half an hour, thanks to Morgan Rogers, Fisayo Dele-Bashiru and Ian Poveda’s strikes, with substitutes Nabil Touazi and Adrian Bernabe finding the back of the net late on.
It was a comfortable win for our youngsters, with keeper Gavin Bazunu required to make only one save and we now go into our final game against Dinamo Zagreb knowing victory would see us progress from Group C.
City showed no sign of nerves, quickly getting into our stride to build a commanding lead.
Rogers had already snapped a half-volley straight at visiting keeper Anatolii Trubin, before Dele-Bashiru’s blocked shot fell kindly for him to tap in at the far post after good work down the right from Jayden Braaf.
The lively Dutchman proved a handful for the Shakhtar left-back and he would have doubled the lead with a fierce 25-yard drive but for Trubin’s full stretch save.
Shakhtar were committed to playing out from the back but City swarmed the Ukrainian’s, barely letting them out of their half and when a weak clearance fell to the feet of Iker Pozo, he squared for Dele-Bashiru to nonchalantly stroke into the bottom right corner from 20-yards.
We looked comfortable, despite not appearing to have hit top gear and an injection of pace from Poveda made it 3-0 to strengthen our grip on the game, as he slalomed past two defenders and fired low to Trubin’s right.
Bazunu was a spectator in the City goal and it continued that way after the break, when Garcia and Harwood-Bellis often found themselves taking up positions 10-yards into the Shakhtar half.
The visitors were forced to sit deep but the pace of City’s front three was something they failed to find a solution for.
Rogers' mazy run through the heart of their defence evidenced that as he forced a good save from Trubin, while last-ditch blocks prevented Poveda and Bernabe from finishing runs of their own.
It took until the 74th minute for Shakhtar to conjure a shooting opportunity, when Mykhailo Mudryk raced onto a long ball which put him clear of the City defence, only to shoot wide of Bazunu’s right post.
The City keeper was eventually called into action when the visitors broke late on, but he saved comfortably from Eduard Kobak before Touazi converted Cole Palmer's centre with a one-touch finish.
That looked to have wrapped up the victory, but within minutes Bernabe added a fifth after he danced through a number of challenges before picking out the bottom corner.
Bazunu was in goal and protected by a defence of Diounkou, Garcia, Harwood-Bellis and Ogbeta.
Pozo adopted the midfield anchor role, with Doyle and Dele-Bashiru ahead of him, with Rogers and Braaf flanking Poveda in the forward line.
What it means
With Atalanta beating Dinamo in the day’s early kick-off, City remain in third place in Group C, with seven points from five games.
It means we are in a must win scenario heading into our final group stage fixture against the Croatian outfit, who are currently one point ahead of us in second place.
Should we win that game and table toppers Atalanta lose to Shakhtar, we could potentially top the group on goal difference.
City’s decisive final group stage game away at Dinamo takes place in two weeks’ time, kicking off at 11am (GMT) on Wednesday 11 December.
There is no Premier League 2 fixture for Harsley’s youngsters this weekend, who return to action in the second round of the Leasing.Com Trophy on Tuesday, with a trip to League One side Shrewsbury Town.