Level 18
You use webhooks. Write some logic that pulls the repo, does everything to make it production-ready and copies it to production. Make that logic accessible (triggerable) via URL. Configure a webhook in your Gitlab repo (or any repo, all the git hosters can do webhooks) that gets send to said URL whenever something is pushed to or merged into master.