Match ends, Coventry City 3, Exeter City 1.
Coventry City sealed an immediate return to League One with a comprehensive win over Exeter in the League Two play-off final at Wembley.
They took a deserved lead after half-time when centre-back Jordan Willis bent a shot into the far corner.
Fellow academy product Jordan Shipley made it 2-0 when his first-time strike deflected over goalkeeper Christy Pym.
Jack Grimmer guided a stunning third into the top corner, with Kyle Edwards netting Exeter's consolation.
However, it could not prevent a second successive play-off final defeat for Paul Tisdale's side.
While Coventry's 28-goal top scorer Marc McNulty did not get on the scoresheet, he was influential throughout, threatening from long range in the first half and later providing two assists.
Exeter's Ryan Harley and Matt Jay forced Sky Blues goalkeeper Lee Burge into routine saves from outside the box, while Tom Bayliss was thwarted by Pym after a mazy run.
The sky's the limit for the Sky Blues?
Coventry had been a top-flight team for 34 years until they were relegated from the Premier League in 2001, and it had all been downhill since then.
Two more relegations, off-field turmoil, a temporary relocation to play home matches in Northampton and protests towards owners Sisu have followed, but the tide appeared to have started turning when they lifted the Checkatrade Trophy at Wembley in April 2017.
Mark Robins, in his second spell in charge, took them to a sixth-placed finish in League Two - the first time they have finished that high in any division since 1970, and they now have a first promotion in 51 years.
For Robins, it is his first promotion during a managerial career spanning more than a decade.
With seven academy players in their squad for the final, and approximately 40,000 fans watching on at Wembley, the future certainly looks brighter for the Sky Blues.
End of an era for Exeter?
After Arsene Wenger's departure from Arsenal, Exeter boss Tisdale is comfortably the longest-serving manager in England's top four divisions - having arrived at St James Park in June 2006.
He spoke about the importance of continuity after their play-off final defeat by Blackpool last year, but after having notice served on his contract by the club's fans, he is being linked with the vacant MK Dons job.
With director of football Steve Perryman retiring this summer, is this the last time Tisdale will take charge of Exeter?
If so, his meticulous nature and ability to bring through youngsters will be almost impossible to replace at the Devon side.
Coventry City boss Mark Robins told BBC Coventry and Warwickshire:
"There's been so much hard work this year and the focus has been there. When we qualified for the play-offs, I said I fancied us and thankfully now I can say I was right.
"It wasn't just blind faith, I think we're growing and a team has to do that. Watching the play-off games prior to this one gave us an insight.
"We knew it would be a game of two halves because of the weather and it had a significant impact on the two play-off finals before as well as today.
"We knew we had to try to control the game and there were a lot of questions asked by both teams."
Exeter manager Paul Tisdale told BBC Radio Devon:
"I'm terribly disappointed. It was a big day and it wasn't our best performance.
"We had two very good goals against us out of the three, so I'm disappointed, but also trying to be very proud because I am of the season we've had, the players and the club generally.
"It's a hard ask but I'm proud of what we've done.
"The first half was a bit of a stalemate, but I'm disappointed we conceded the second goal so quickly. It was a real killer for us."
- 26ShipleySubstituted forReidat 73'minutes
- 10McNultySubstituted forPonticelliat 82'minutes
- 9BiamouSubstituted forClarke-Harrisat 51'minutes
- 3WoodmanSubstituted forJamesat 63'minutes
- 44BoatengSubstituted forEdwardsat 73'minutes
- 21MoxeySubstituted forJayat 63'minutes
- David Webb
- Shots on Target
Second Half ends, Coventry City 3, Exeter City 1.
Attempt missed. Jayden Stockley (Exeter City) right footed shot from the centre of the box is close, but misses to the left. Assisted by Ryan Harley.
Foul by Ryan Harley (Exeter City).
Liam Kelly (Coventry City) wins a free kick in the attacking half.
Goal! Coventry City 3, Exeter City 1. Kyle Edwards (Exeter City) right footed shot from the left side of the box to the bottom right corner. Assisted by Matt Jay.
Attempt missed. Jonson Clarke-Harris (Coventry City) left footed shot from outside the box misses to the left. Assisted by Tom Bayliss.
Hand ball by Jonson Clarke-Harris (Coventry City).
Attempt missed. Jordan Storey (Exeter City) header from the centre of the box is close, but misses to the left. Assisted by Matt Jay.
Attempt missed. Jayden Stockley (Exeter City) right footed shot from outside the box is high and wide to the right.
Substitution, Coventry City. Jordan Ponticelli replaces Marc McNulty.
Matt Jay (Exeter City) hits the left post with a right footed shot from outside the box. Assisted by Kyle Edwards.
Offside, Coventry City. Kyel Reid tries a through ball, but Chris Stokes is caught offside.
Corner, Coventry City. Conceded by Christy Pym.
Attempt saved. Tom Bayliss (Coventry City) right footed shot from the left side of the box is saved in the bottom right corner. Assisted by Jonson Clarke-Harris.
Attempt blocked. Jake Taylor (Exeter City) right footed shot from outside the box is blocked. Assisted by Pierce Sweeney.
Corner, Exeter City. Conceded by Lee Burge.
Attempt saved. Ryan Harley (Exeter City) right footed shot from outside the box is saved in the bottom right corner. Assisted by Jordan Tillson.
Attempt blocked. Kyle Edwards (Exeter City) right footed shot from outside the box is blocked. Assisted by Jayden Stockley.
Substitution, Exeter City. Kyle Edwards replaces Hiram Boateng.