Semantic versioning

Hello there ,
am completely new to Gitlab and I would like to understand about how to do semantic versioning automatically in Gitlab ?

When we commit in Master , we need to tag it and release automatically in CICD.

Has anyone done that for your project ? If so what’s the best way of doing it please ?

Thanks for the information !